- 日時: 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)
上記プログラムのデザイン画面と実行図(画像をクリックすると元のサイズで見られます。)
|