お世話になります。
VB6でメインフォーム(*.exeで起動されるフォーム)がデスクトップ内で移動したことをそのフォーム自身が知るためにはどのようにすればよいでしょうか。
目的は、移動後のフォームの位置情報の取得です。
フォームのサイズを変更した時は"Resize"イベントが発行されるので、それをきっかけにLeft,Top情報を取得できます。
同じようにフォームが移動した時にLeft,Top情報を取得する方法を知りたいです。
API等の利用で可能になるのであればそれでもかまいません。
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
Fromをサブクラス化して WM_MOVEメッセージを捕まえてみましょう
標準モジュールを追加して以下のコードを記述します
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
(ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, _
ByVal Msg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_WNDPROC = (-4)
Const WM_MOVE = &H3
Public lpfnProc As Long
Public nTop As Integer, nLeft As Integer
Public Function myProc(ByVal hWnd As Long, ByVal uMsg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If uMsg = WM_MOVE Then
Dim x As Long, y As Long
x = Form1.Left
y = Form1.Top
If (x <> nLeft) Or (y <> nTop) Then
MsgBox x - nLeft & " - " & y - nTop
nLeft = x
nTop = y
End If
End If
myProc = CallWindowProc(lpfnProc, hWnd, uMsg, wParam, lParam)
End Function
From1のLoadイベントなどで
nTop = Me.Top
nLeft = Me.Left
lpfnProc = SetWindowLong( ME.hWnd, GWL_WNDPROC, Addressof myProc )
と記述します
いったん保存してから実行してください
サブクラス化した場合 VB6のIDEのブレークポイントによるデバッグはしないようにしてください
ブレークポイントを使うと IDEがクラッシュします
Debug.PrintやMsgBoxなどは使えますが ・・・
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP $_SESSIONに渡した後はそのまま使っても問題ありませんか? 3 2022/11/08 22:17
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- 楽器・演奏 ★この考え方 どう思われますかぁ? 5 2023/06/08 16:44
- PHP php 確認表示画面で値をSESSIONから取り出す理由の解釈は正しいでしょうか? 1 2023/06/09 17:39
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Google Drive Google form を利用して 問い合わせフォームを作りたい 1 2022/04/25 14:15
- PHP sessioncookieをではなくcookieを使わなければならない理由について… 4 2022/11/07 13:01
- Access(アクセス) アクセス 意図せずサブプロシージャを移動してしまうのを止めたい 1 2022/09/02 09:19
- 確定申告 公金受取口座登録後、e-Taxで口座情報を入力する必要はありますか 2 2022/05/09 06:48
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
コントロールの存在確認
-
ユーザーフォームのテキストボ...
-
ユーザフォームの印刷
-
Microsoft Formsの「個人情報や...
-
クリックイベントなのに、2回ク...
-
Accessで、一つのフォーム画面...
-
ExcelVBAのユーザーフォームの...
-
Form_Load と Form_Activate の...
-
accessのフォーム上でで画像を...
-
エクセルVBAのフォームを最...
-
ユーザーフォーム上に現在日時...
-
モーダルフォームとモードレス...
-
Hideについて(.NET)
-
EXCEL VBA ユーザーフォームの...
-
VB.NETでフォームロード中のエ...
-
フォームのテキストボックスな...
-
MSGBOXのフォント大きさ変更
-
VBA(エクセル)のユーザー...
-
'ユーザーフォーム右上隅の[×...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ユーザーフォームを表示中にシ...
-
クリックイベントなのに、2回ク...
-
ExcelVBAのユーザーフォームの...
-
ユーザーフォームのテキストボ...
-
Microsoft Formsの「個人情報や...
-
ユーザーフォーム上に現在日時...
-
Form_Load と Form_Activate の...
-
モーダルフォームとモードレス...
-
Excelにて、ユーザーフォームで...
-
VBAでユーザーフォームを再表示...
-
【VBAユーザーフォームで閉じる...
-
MSGBOXのフォント大きさ変更
-
VBA(エクセル)のユーザー...
-
Hideについて(.NET)
-
エクセルVBAのフォームを最...
-
コントロールの存在確認
-
ACCESSのフォーム、開くんです...
-
'ユーザーフォーム右上隅の[×...
-
フォームウィンドウを最前面に...
-
ユーザーフォームのラベルに時...
おすすめ情報