Win98, VB6を使用しています。
フォーム上に動的配列のラベルコントロールを2次元で
並べており、マスメになっています。
「ある」マスからドラッグを開始し、真っ直ぐにとなりあった
マスを複数選択します。
最終的にドラッグしたマスは「どのマスからどのマスまでか」を
得るようにしたいのです。
現時点では、動的配列を2次元で表示するところまで出来ましたが、
その先がわかりません。
どなたかにお答えいただければ幸いです。
よろしくお願いいたします。
> 最終的にドラッグしたマスは「どのマスからどのマスまでか」を
得るようにしたいのです。
開始マスは「MouseDown イベントが発生したラベル」で良いかと。
終了マスはMouseUp イベント取得時に、x, y 座標から算出するとか。
あるいは、複数 Label での升目表示に拘らないのであれば、
使用するコントロールを 1 つの MSFlexGrid に変更し、
ドラッグ部分については MouseDown/Up イベントで
MSFlexGrid1.MouseRow/Col を取得する形にするのも手かと。
魔界の仮面弁士 様
> 開始マスは「MouseDown イベントが発生したラベル」で良いかと。
> 終了マスはMouseUp イベント取得時に、x, y 座標から算出するとか。
なるほど、簡潔なアイデアで感心致しました。
ところで、ドラッグしているマウスカーソルがマスに入った時、
マスの色を変えてやりたいのですが「MouseMove」で逐次座標の
計算をして判断をしてやらないといけないのでしょうか?
簡単な方法があれば、アドバイスをお願い致します。
> ドラッグしているマウスカーソルがマスに入った時、
> マスの色を変えてやりたいのですが
これで良いのかな。
Option Explicit
Private Sub Form_Load()
Dim L As Label
'本来は、デザイン時に設定しておけば十分
For Each L In Label1
L.OLEDropMode = vbOLEDropManual
Next
End Sub
Private Sub Label1_MouseDown(Index As Integer, Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1(Index).OLEDrag
Screen.MousePointer = MousePointerConstants.vbArrow
End Sub
Private Sub Label1_OLEDragDrop(Index As Integer, Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1(Index).BackColor = vbButtonFace
End Sub
Private Sub Label1_OLEDragOver(Index As Integer, Data As DataObject, Effect As Long, Button As Integer, Shift As Integer, X As Single, Y As Single, State As Integer)
If State = vbLeave Then
Label1(Index).BackColor = vbButtonFace
Else
Label1(Index).BackColor = vbRed
End If
End Sub
Private Sub Label1_OLEGiveFeedback(Index As Integer, Effect As Long, DefaultCursors As Boolean)
DefaultCursors = False
End Sub
Private Sub Label1_OLEStartDrag(Index As Integer, Data As DataObject, AllowedEffects As Long)
Data.SetData CStr(Index), vbCFText
AllowedEffects = vbDropEffectCopy
End Sub
魔界の仮面弁士 様
おかげさまで、やりたいことが出来そうです。
どうもありがとうございました。
ツイート | ![]() |