お世話になります。
フォームに配置したコントロールを、実行後にも自由にドラッグアンドドロップ
で移動したいのですが(VBのIDEのように)、うまくいきません。
とりあえずコマンドボタンでやってみました。
コマンドボタンのMouseDownイベントでフラグを真にして、
MouseMoveイベントでフラグが真であればコマンドボタンのLeft,TopプロパティそれぞれにX座標とY座標を代入して、
MouseUpイベントでフラグを偽にするようにしました。
しかし実行していざドラッグをはじめると、一応うまくいくのですが、
ボタンが分裂して表示されてしまいます。
また、このやり方だと、全てのコントロールの各Mouseイベントに同様の記述をしなければならず、煩雑です。
なんとかうまいやり方はありませんでしょうか?
よろしくお願いします。
またぽかをやってしまいました。申し訳ありません。><
環境は、Windows98SE,VB6.0SP6です。
よろしくお願いします。
>ボタンが分裂して表示されてしまいます。
過去ログ検索『再描画』で引っかかるような内容で解決できると
思います。
>また、このやり方だと、全てのコントロールの各Mouseイベントに同様の記述をしなければならず、煩雑です。
共通関数を呼び出すのも許さないレベルの話ですか?
>特攻隊長まるるうさん
再描画で検索して一通り目を通しましたがどれが必要な情報なのか
理解できませんでした。
ラベルの最適な表示方法は?http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200304/03040087.txt
↑を参考に、
Command1_MouseMoveイベントで、
With Command1
If flag = True Then
.Visible = False
.Move X,Y
.Visible = True
End If
End With
とやってみましたが、やはりCommand1ドラッグ時上下二つに分裂(もともとのCommand1とその上にもうひとつ)して表示され、
ドロップ時に何故か分裂した上側の位置に移動されてしまいます。
何か決定的な勘違いをしている気がします。
アドバイスをお願いします。
何度もすみません、
ああ、そっか(^^;)こっちで再現しないので困ってたんですが、
X ,Y の基準がボタンの .Top .Left ですね、ボタンのイベントだから。
移動する時はフォームの .Top .Left が基準です。で、2箇所をガンガン
動きまくってます。ボタンをフォームの左上の隅に配置し、少しだけ
ドラッグしてると分裂してる差がほとんど無くなるでしょ?
[VB6.0]
With Command1
If flag = True Then
Debug.Print X & "," & Y
.Move X, Y
End If
End With
例えば、
[Vb6.0]
With Command1
If flag = True Then
Debug.Print X & "," & Y
.Move .Left + X, .Top + Y
End If
End With
でそれらしく動くと思います。
DragDropを使用して、Label1 と Picture1 の各コントロール
を移動するサンプルを作ってみました。
Command1, Command2 で移動の許可/禁止を切り替えます。
Option Explicit
Private m_bCanMove As Boolean
Private m_dx As Single
Private m_dy As Single
Private Sub Ctrl_DragDrop(oCtrl As Object, Source As Control, X As Single, Y As Single)
If (m_bCanMove) Then
If (oCtrl Is Source) Then
Source.Move Source.Left + X - m_dx, Source.Top + Y - m_dy
Else
Source.Move oCtrl.Left + X - m_dx, oCtrl.Top + Y - m_dy
End If
End If
End Sub
Private Sub Ctrl_MouseDown(oCtrl As Object, X As Single, Y As Single)
If (m_bCanMove) Then
oCtrl.Drag vbBeginDrag
m_dx = X
m_dy = Y
End If
End Sub
Private Sub Command1_Click()
m_bCanMove = True ' 移動許可
End Sub
Private Sub Command2_Click()
m_bCanMove = False ' 移動禁止
End Sub
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
If (m_bCanMove) Then
Source.Move X - m_dx, Y - m_dy
End If
End Sub
Private Sub Label1_DragDrop(Source As Control, X As Single, Y As Single)
Call Ctrl_DragDrop(Label1, Source, X, Y)
End Sub
Private Sub Label1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call Ctrl_MouseDown(Label1, X, Y)
End Sub
Private Sub Picture1_DragDrop(Source As Control, X As Single, Y As Single)
Call Ctrl_DragDrop(Picture1, Source, X, Y)
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
Call Ctrl_MouseDown(Picture1, X, Y)
End Sub
>特攻隊長まるるうさん
>DRAG息子さん
お二人のやり方で無事解決いたしました。ありがとうございました。
ツイート | ![]() |