- 日時: 2009/11/23 07:38
- 名前: 花ちゃん
- ***********************************************************************************
* カテゴリー:[フォーム][][] * * キーワード:フォームをスクロール,仮想画面,,,, * ***********************************************************************************
投 稿 者 : 花ちゃん VB6.0 用に投稿した(下記)物を VB.NET 用に移植したものです。 http://www.hanatyan.sakura.ne.jp/patio/read.cgi?no=239
VB.NET では、Me.AutoScroll =True でフォームをスクロール表示する事ができますが、 Button4.Location = New Point(-9800, 162) のような所に配置したコントロールを表示 する事はできないようです。(他に方法があるかも知れませんが?) 従って、VB.NET 用も紹介しておきます。
※ 実行図を付けても、あまり実感出来ないので、ぜひこのコードを試して見て下さい。
--------------------------------------------------------------------------------
Imports System.Runtime.InteropServices
Public Class Form1 'クライアント領域等の矩形を指定する構造体 Private Structure RECT Dim Left As Integer Dim Top As Integer Dim Right As Integer Dim Bottom As Integer End Structure
'指定の条件でクライアント領域をスクロールする(97) <DllImport("user32.dll", CharSet:=CharSet.Auto)> _ Private Shared Function ScrollWindowEx( _ ByVal hwnd As IntPtr, _ ByVal dx As Integer, _ ByVal dy As Integer, _ ByVal lprcScroll As Integer, _ ByRef lprcClip As RECT, _ ByVal hrgnUpdate As Integer, _ ByRef lprcUpdate As RECT, _ ByVal fuScroll As Integer) As Integer End Function
Private Const SW_SCROLLCHILDREN As Integer = &H1 'すべての子ウインドウをスクロール
'********1*********2*********3*********4*********5*********6*********7*********8 '*: scX : 水平方向の移動量 (Pixel) 負数の時は左に移動するから右側の画面が表示 '*: scY : 垂直方向の移動量 (Pixel) 負数の時は上に移動するから下側の画面が表示 '*: 備考 : '********1*********2*********3*********4*********5*********6*********7*********8 Private Sub ScrollWindow(ByVal scX As Integer, ByVal scY As Integer) Dim rc As Integer Dim Rect1 As RECT, Update1 As Integer, Rect2 As RECT '第二引数は、水平方向の移動量 第三引数は、垂直方向の移動量 rc = ScrollWindowEx(Me.Handle, scX, scY, 0, Rect1, _ Update1, Rect2, SW_SCROLLCHILDREN) Me.Refresh() End Sub
Private Sub Form1_Load(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles MyBase.Load '左側の仮想画面上に配置する Button4.Location = New Point(-9800, 162) End Sub Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click '上に移動のボタンの処理 Call ScrollWindow(0, -60) '(単位は、Pixel) End Sub
Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click '下に移動のボタンの処理 Call ScrollWindow(0, 60) End Sub
Private Sub Button3_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button3.Click '左側の仮想画面を表示のボタンの処理 Call ScrollWindow(10000, 0) '2560x1600 の解像度でも楽々対応できます。 End Sub
Private Sub Button4_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button4.Click '元の標準の画面を表示のボタンの処理 Call ScrollWindow(-10000, 0)
End Sub Private Sub Form1_Click(ByVal sender As Object, _ ByVal e As System.EventArgs) Handles Me.Click '意外な結果が返ります。 MessageBox.Show("X 座標 : " & Cursor.Position.X.ToString & " " & _ "Y 座標 : " & Cursor.Position.Y.ToString) End Sub End Class
|