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

***********************************************************************************
* カテゴリー:[フォーム][][]                                                      *
* キーワード:フォームをスクロール,仮想画面,,,,                                   *
***********************************************************************************

投 稿 者 : 花ちゃん

他の事を調べていて見つけて試していたら、結構使えそうなので紹介しておきます。
VB6.0 では、通常フォームをスクロールさせたいと言う場合は、PictureBox 等のコンテナを
使って移動させるのが一般的ですが、この ScrollWindowEx API 関数を使えば、フォームの
クライアント領域をスクロールさせる事ができます。
Command4.Left = -9835(Pixel) といった所に配置したコントロールを瞬時に表示する事も
でき、上下・左右上のフォーム外の位置に配置した画面に切り替えて使用すれば、同一
フォーム上に幾つものフォームを配置したように使う事もできます。
又、ラベルやイメージコントール等やフォーム上に表示した画像・メニュー等移動しない
物もあります、そう言った物を逆手取って使用したり、アイデア次第では、結構面白い
物が作れるかも知れません。

※ 実行図を見ても、あまり実感出来ないので、ぜひ下記コードを DL して試して下さい。

--------------------------------------------------------------------------------

Option Explicit

'クライアント領域等の矩形を指定する、RECT 構造体
Private Type RECT
   Left   As Long
   Top    As Long
   Right  As Long
   Bottom As Long
End Type

'指定の条件でクライアント領域をスクロールする(97)
Private Declare Function ScrollWindowEx Lib "user32" ( _
   ByVal hwnd As Long, ByVal dx As Long, ByVal dy As Long, _
   ByVal lprcScroll As Long, lprcClip As RECT, ByVal hrgnUpdate As Long, _
   lprcUpdate As RECT, ByVal fuScroll As Long) As Long
Private Const SW_SCROLLCHILDREN = &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 Long, ByVal scY As Long)
   Dim rc As Long
   Dim Rect1 As RECT, Update1 As Long, Rect2 As RECT
   '第二引数は、水平方向の移動量  第三引数は、垂直方向の移動量
   rc = ScrollWindowEx(Me.hwnd, scX, scY, 0, Rect1, _
                           Update1, Rect2, SW_SCROLLCHILDREN)
   Me.Refresh
End Sub

Private Sub Command1_Click()
'上に移動のボタンの処理
   Call ScrollWindow(0, -60)  '(単位は、Pixel)
End Sub

Private Sub Command2_Click()
'下に移動のボタンの処理
   Call ScrollWindow(0, 60)
End Sub

Private Sub Command3_Click()
'左側の仮想画面を表示のボタンの処理
   Call ScrollWindow(10000, 0)   '2560x1600 の解像度でも楽々対応できます。
End Sub

Private Sub Command4_Click()
'右に移動のボタンの処理
   Call ScrollWindow(-10000, 0)
End Sub

Private Sub Form_Load()
   '最大のフォームサイズ時でも同様に、360度スクロールします。
   Me.ScaleMode = vbPixels    '単位を Pixel に統一した方が位置関係を計算し易い
   Me.Move 0, 0, 7500, 3600
   'Me.ClipControls = False   '別途、プロパティで設定の事
   'Me.BorderStyle = 1        '別途、プロパティで設定の事
  
   '仮想画面に表示(別途、プロパティで設定でも可)
   Command4.Left = -9835      '(Pixel) デザイン時の表示位置(165) - 移動位置(10000)
End Sub

--------------------------------------------------------------------------------
  上記プログラムや図を見ても解りずらいかも知れませんので、下記サンプルをダウン
 ロードして試して見て下さい。

 サンプルコードのダウンロード先
 http://hanatyan.sakura.ne.jp/freesoft/vb6_557.lzh  (vb6_557.lzh  5.76KB)

  上記プログラムのデザイン画面と実行図(画像をクリックすると元のサイズで見られます。)



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