tagCANDY CGI VBレスキュー(花ちゃん) - VBレスキュー(花ちゃん)の投稿サンプル用掲示板 - Visual Basic 6.0 VB2005 VB2010
VB2005用トップページへVBレスキュー(花ちゃん)のトップページVB6.0用のトップページ
VBレスキュー(花ちゃん)の投稿サンプル用掲示板
     サンプル投稿用掲示板  VB2005 〜 用トップページ  VB6.0 用 トップページ
クライアント領域をスクロールする(仮想画面?の作成・表示)(VB.NET) ( No.0 )  [親スレッドへ]
日時: 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



 [スレッド一覧へ] [親スレッドへ]