実行中のフォーム上で移動及びサイズ変更可能なコントロールを
作成したいのですが、その方法が全く分かりません。
ヒントだけでもお願いします。
GetWindowLong
SetWindowLong
WS_THICKFRAME
をキーワードにGoogleで検索して見て下さい
うちの旧学校の今執筆中の文章に書いているんですけど、
もしかしたら、SendMessageで、WM_NCLBUTTONDOWNを送ることで、
サイズ変更とかができるようになるかもしれません。
このメッセージをフォームに送ると、タイトルバー(非クライアント領域)でなくてもフォームを動かしたりできるようになります。
すべてのウィンドウに非クライアント領域がある(隠されているだけ)と考えた場合、
これを応用して、どのウィンドウ(子ウィンドウ)でも動かせると思うんですが…。
くわしくはWM_NCLBUTTONDOWNを調べてみてください。
おおっ! 何となくイメージがわきました。
ありがとうございます。
しかし、移動後の配置を保存することは可能か?
と思ってみたりして・・・。
早速チャレンジ開始!
ホントにありがとうございました。
私も移動・サイズ変更できるコマンドボタンを作りたく、ここにきましたが、
サイズ変更できるようになっても、ドラッグで移動ができません。
どうしたらいいのでしょうか?
以下がリサイズのソースです。
Private Sub Command1_Click()
' ビューを作成する
gb_ViewNum = gb_ViewNum + 1
gb_Name = "ビュー" & gb_ViewNum
Load Ope.cmdView(gb_ViewNum)
Ope.cmdView(gb_ViewNum).ZOrder
Ope.cmdView(gb_ViewNum).Visible = True
Ope.cmdView(gb_ViewNum).Left = 6000
Ope.cmdView(gb_ViewNum).Caption = "ビュー" & gb_ViewNum
Show
Dim lngWindowOldStyle As Long
Dim lngWindowNewStyle As Long
Dim lngWin32apiResultCode As Long
' ビューをリサイズ可にする
With Ope.cmdView(gb_ViewNum)
' ウィンドウスタイルを取得
lngWindowOldStyle = _
GetWindowLong(.hWnd, _
GWL_STYLE)
' 新しいウィンドウスタイルを指定
lngWindowNewStyle = _
lngWindowOldStyle Or _
WS_THICKFRAME
' 新しいウィンドウスタイルを設定
lngWin32apiResultCode = _
SetWindowLong(.hWnd, _
GWL_STYLE, _
lngWindowNewStyle)
' 新しいウィンドウスタイルを適用
lngWin32apiResultCode = _
SetWindowPos(.hWnd, _
0, _
0, 0, _
0, 0, _
SWP_NOSIZE Or _
SWP_NOMOVE Or _
SWP_NOZORDER Or _
SWP_DRAWFRAME)
End With
Unload Me
End Sub
SetWindowPosをどう使うかがよく分からないのです。
うほっ!
juiceさん、
http://www.vector.co.jp/soft/win95/prog/se154743.html
↑の中の「マウス」の中の「7.マウス操作でコントロールを移動する」。
おかげ様でとりあえず形になりました。ありがとうございました。
juiceさんも出来ましたよね??
今後ともよろしくお願いします。
移動はAPIを使用しなくてもできます。下記を試して見て下さい。
Option Explicit
Private XPos As Long
Private YPos As Long
Private Sub Command1_DragDrop(Source As Control, _
X As Single, Y As Single)
'同一コントロール内でドロップした場合の補正
Source.Move (Command1.Left + X - XPos), (Command1.Top + Y - YPos)
End Sub
Private Sub Command1_MouseDown(Button As Integer, _
Shift As Integer, X As Single, Y As Single)
'ドラッグ開始位置の保存とドラッグの開始
YPos = Y
XPos = X
Command1.Drag vbBeginDrag
End Sub
Private Sub Form_DragDrop(Source As Control, _
X As Single, Y As Single)
'フォーム上にドロップした時の補正
Source.Move X - XPos, Y - YPos
End Sub
2HDさん!できましたよ!!
ありがとうございます。
VBレスキュ-(花ちゃん)さんも感謝です。
ドロップ後の補正がよく分からなかったのですが、
理解できました。
ツイート | ![]() |