Option Explicit
' µÑÇá»Ã·Õèãªé㹡ÒÃÃкصÓáË¹è§ àÁ×èÍàÃÔèÁµé¹¡ÒÃÅÒ¡ (Drag)
Dim AxisX As Integer
Dim AxisY As Integer
' µÑÇá»Ãà¾×èÍá¨é§¡Òà Drop ŧµÒÁµÓá˹è§ÇèÒ¶Ù¡µéͧËÃ×ÍäÁè (äÁè¨Óà»ç¹µéͧãªé¡çä´é ... ´Ù¨Ò¡à˵ءÒóì DragDrop)
Dim RedFlag As Boolean
Dim GreenFlag As Boolean
Dim BlackFlag As Boolean
' µÑÇá»ÃÊÓËÃѺµÃǨÊͺ¡Ò÷ÓẺ·´Êͺä´é¶Ù¡µéͧËÁ´áÅéÇËÃ×ÍäÁè
Dim TotalScore As Integer
' µÑÇá»Ããªéà¡çºàÇÅÒàÃÔèÁµé¹¡Ò÷ÓẺ·´Êͺ
Dim StartTime As Date
' ¼Á¨Ð͸ԺÒÂã¹Êèǹ·Õèà¡ÕèÂÇ¢éͧ¡ÑºÊÕá´§ (RED) à·èÒ¹Ñé¹¾Í ... ¹èФÃѺ
' à˵ءÒóì (Event) 㹡Òá´àÁÒÊìŧ·Õè Control (Coomand Button) à¾×èÍÅÒ¡
Private Sub cmdRed_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
' ÃкصÓá˹è§á¡¹ X ᡹ Y àÁ×èÍàÃÔèÁµé¹¡ÒÃÅÒ¡ (Drag)
' à¾ÃÒÐËÒ¡ÅÒ¡ä»ÇÒ§¼Ô´µÓá˹è§Áѹ¡ç¨Ðä´é¡ÃÐâ´´¡ÅѺÁÒÍÂÙè·Õèà´ÔÁä´é
AxisX = X
AxisY = Y
' µÃǨÊͺ¡è͹ÇèÒ»ØèÁµÑÇàÅ×Í¡ (ÊÕá´§) ä»ÇҧŧµÃ§µÒÁµÓá˹觢ͧÁѹËÃ×ÍäÁè
' ËÒ¡äÁèãªè ¡çãËéà¡Ô´¡ÒÃà¤Å×è͹·Õèä´é ... ËÒ¡ãªè µéͧäÁèãËéà¡Ô´¡ÒÃà¤Å×è͹ÂéÒ»ØèÁ¹Õéä»ä˹
If Not RedFlag Then cmdRed.Drag vbBeginDrag
End Sub
' ¡´àÁÒÊìáÅéÇÅÒ¡ Control ÁÒÇÒ§ ... »ÅèÍÂàÁÒÊì
Private Sub cmdRed_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
' àÁ×èÍ»ÅèÍÂàÁÒÊìÍÍ¡ ... ¡çÊÔé¹ÊØ´¡ÒÃÅÒ¡ÁÒÇÒ§áÅéÇ
cmdRed.Drag vbEndDrag
End Sub
' àËÁ×͹¡Ñ¹¡Ñº cmdRed ... àÅÂäÁè͸ԺÒÂ
Private Sub cmdGreen_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
AxisX = X
AxisY = Y
If Not GreenFlag Then cmdGreen.Drag vbBeginDrag
End Sub
Private Sub cmdGreen_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
cmdGreen.Drag vbEndDrag
End Sub
Private Sub cmdBlack_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
AxisX = X
AxisY = Y
If Not BlackFlag Then cmdBlack.Drag vbBeginDrag
End Sub
Private Sub cmdBlack_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
cmdBlack.Drag vbEndDrag
End Sub
Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)
' à¤Å×è͹ÂéÒ Control ÁÒàÃÕºÃéÍ ¡çãËéÇҧŧ㹵Óá˹觢ͧ Control »ÅÒ·ҧ (Label ºÍ¡ÊÕ)
Source.Move X - AxisX, Y - AxisY
End Sub
Private Sub Form_Load()
Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
TotalScore = 0
' ¡Ó˹´äÇéà»ç¹à·ç¨ ... à¾×èÍãËéÃÙéÇèÒÁѹÂѧäÁèä´é¶Ù¡ÅÒ¡ä»ÇÒ§µÃ§µÒÁµÓá˹è§
RedFlag = False
GreenFlag = False
BlackFlag = False
' àÃÔèÁµé¹¨ÑºàÇÅÒ
StartTime = FormatDateTime(Now(), vbLongTime)
' Íѹ·Õè¨ÃÔ§áÅéÇ àÃÒ¤ÇÃÊØèÁµÓá˹觢ͧÇѵ¶ØµèÒ§æ¡è͹ ... ¹èҨдաÇèÒ à¾×èÍäÁèãËéà´ç¡à¡Ô´¡Òè´¨Óä´é
' ÇÔ¸Õ¤Ô´ ¤×Í ÊÁÁصÔãËéÊØèÁµÓá˹觢ͧ»éÒÂÅÒàºÅ (Label) ·Ñé§ËÁ´ 3 µÑÇ àªè¹ ...
' ¡Ó˹´ãËé A(1, 1) / A(1,2) à¡çºµÓá˹觫éÒÂ/º¹¢Í§ÅÒàºÅµÑÇ·Õè 1 = Left, Top
' ¡Ó˹´ãËé A(2, 1) / A(2, 2) à¡çºµÓá˹觫éÒÂ/º¹¢Í§ÅÒàºÅµÑÇ·Õè 2 = Left, Top
' ¡Ó˹´ãËé A(3, 1) / A(3, 2) à¡çºµÓá˹觫éÒÂ/º¹¢Í§ÅÒàºÅµÑÇ·Õè 3 = Left, Top
' á¹è¹Í¹ÇèÒ ... ¡Ó˹´¤èÒµÑÇá»Ãà»ç¹áºº Array ¢¹Ò´ 3 á¶Ç 2 ËÅÑ¡
' ÊØèÁµÑÇàÅ¢ÃÐËÇèÒ§ 1 - 3 (´Ù㹺·¤ÇÒÁàÃ×èͧ¢Í§¡ÒÃÊØèÁµÑÇàŢẺäÁè«éÓ)
' àªè¹ 3, 1, 2 (¤èÒ·Õèµéͧãªéã¹ Array) ... ¹Ñ蹡çËÁÒ¤ÇÒÁÇèÒ
' ãËéÅÒàºÅµÑÇ·Õè 1 ä»ÍÂÙèã¹µÓá˹觷Õè 3
' ãËéÅÒàºÅµÑÇ·Õè 2 ä»ÍÂÙèã¹µÓá˹觷Õè 1
' ãËéÅÒàºÅµÑÇ·Õè 3 ä»ÍÂÙèã¹µÓá˹觷Õè 2
' àÍÒà·èÒ¹Õé¡è͹ÅèФÃѺ ... ÁÒÊÃØ»·éÒÂäÇéãËé¤ÃÙ ÍÒ¨ÒÃÂì ·èÒ¹ä´é¹Ó令ԴàÅè¹æ¡è͹ (áµèàÍÒ¨ÃÔ§)
End Sub
' à˵ءÒóìàÁ×èÍÅÒ¡»ØèÁÁÒÇÒ§ áÅлÅèÍÂàÁÒÊìÍÍ¡ä»àÃÕºÃéÍ ... ¼ÁàÅ×Í¡ãªéà˵ءÒóì DragDrop
' ËÃ×ÍàÃÒÍÒ¨¨ÐàÅ×Í¡ÇÔ¸Õ¡ÒÃÅÒ¡»ØèÁÁÒÇÒ§äÇéà˹×ÍÅÒàºÅ¡çä´é (à˵ءÒóì DragOver)
Private Sub lblRed_DragDrop(Source As Control, X As Single, Y As Single)
' ·´ÊͺÇèÒ»ØèÁ·ÕèÅÒ¡ÁÒÇÒ§¹Ñ鹪×èÍ cmdRed ËÃ×ÍäÁè
If Source.Name = "cmdRed" Then
' ãËéÇÒ§»ØèÁŧà˹×ÍÅÒàºÅ
Source.Move lblRed.Left, lblRed.Top
' ÇÒ§àÃÕºÃéÍÂáÅéÇ ... ÊÔé¹ÊØ´¡ÒÃÅÒ¡ÁÒÇÒ§
cmdRed.Drag vbEndDrag
' ============================================================
' á¨é§ãËéÃÙéÇèÒ»ØèÁä´é¶Ù¡ÁÒÇҧŧµÃ§µÒÁµÓá˹è§áÅéÇ à¾×èÍäÁèãËéà¡Ô´¡ÒÃà¤Å×è͹ÂéÒÂ˹Õä»ä˹ä´éÍÕ¡
' ¨ÐÊÑÁ¾Ñ¹¸ì¡Ñºà˵ءÒóìàÁÒÊì¡´àÅ×Í¡»ØèÁ (MouseDown)
RedFlag = True
'
' ËÃ×Í ¡Ó˹´ãË黨èÁ¹ÕéäÁèÊÒÁÒö¡´ÍÐäÃä´éàÅÂ
cmdRed.Enabled = False
' Íѹ·Õè¨ÃÔ§ àÁ×èÍ¡Ó˹´ãË黨èÁäÁèÊÒÁÒöãËé¡´ä´é (Enabled = False)
' àÃÒ¡çäÁè¨Óà»ç¹ãËéÁÕµÑÇá»ÃẺ Boolean (RedFlag) à¾×èÍãªé㹡Ò÷´Êͺ¡çä´é ...
' á¤è¼Á·Óà¼×èÍæäÇéãËé´Ùà·èÒ¹Ñé¹àͧ¤ÃѺ ... ¾Õè¹éͧ ... à¾ÃÒÐäÁèá¹èÇèÒÍÒ¨¨Ðãªé§Ò¹¡çà»ç¹ä»ä´é
' ============================================================
' à¾ÔèÁ¤Ðá¹¹¢Öé¹ÍÕ¡ 1
TotalScore = TotalScore + 1
' µÃǨÊͺÇèÒ·Ó¶Ù¡µéͧ¤ÃºËÁ´ 3 ¢éÍáÅéÇËÃ×ÍäÁè
' ËÒ¡ãªèãË騺â»Ãá¡ÃÁ
If CheckScore(TotalScore) Then End
' ¡Ã³Õ·ÕèäÁèãªè ÍÒ¨¨ÐäÁè¨Óà»ç¹µéͧá¨é§¢éͤÇÒÁºÍ¡¡çä´éËÃÍ¡ ...
' áµè¡ç¤ÇèÐà¡çº¢éÍÁÙÅ㹡Ò÷ӼԴäÇé´éÇ à¾×èÍÊÃØ»ã¹µÍ¹·éÒÂ
' ÅÒ¡ÁÒ·Ó¶Ù¡à·èÒäà ·Ó¼Ô´à·èÒäà ... à¢éÒã¨ÁÑé¹ѡàÃÕ¹ àÍ頤س¤ÃÙ 55555+
Else
' ËÅѧ¨Ò¡áÊ´§¢éͤÇÒÁáÅéÇ »ØèÁ·ÕèäÁè¶Ù¡µéͧ¨Ðà´é§¡ÅѺ仵Óá˹觷Õèà´ÔÁµÒÁ·Õè¡Ó˹´ÁÒ¨Ò¡ AxisX áÅÐ AxisY
MsgBox "äÁè¶Ù¡µéͧ¹èФèÐ¤Ø³Ë¹Ùæ.", vbOKOnly + vbExclamation, "·Ó¼Ô´¨éÒ"
End If
End Sub
Private Sub lblBlack_DragDrop(Source As Control, X As Single, Y As Single)
If Source.Name = "cmdBlack" Then
Source.Move lblBlack.Left, lblBlack.Top
cmdBlack.Drag vbEndDrag
BlackFlag = True
cmdBlack.Enabled = False
TotalScore = TotalScore + 1
If CheckScore(TotalScore) Then End
Else
MsgBox "äÁè¶Ù¡µéͧ¹èФèÐ¤Ø³Ë¹Ùæ.", vbOKOnly + vbExclamation, "·Ó¼Ô´¨éÒ"
End If
End Sub
Private Sub lblGreen_DragDrop(Source As Control, X As Single, Y As Single)
If Source.Name = "cmdGreen" Then
Source.Move lblGreen.Left, lblGreen.Top
cmdGreen.Drag vbEndDrag
GreenFlag = True
cmdGreen.Enabled = False
TotalScore = TotalScore + 1
If CheckScore(TotalScore) Then End
Else
MsgBox "äÁè¶Ù¡µéͧ¹èФèÐ¤Ø³Ë¹Ùæ.", vbOKOnly + vbExclamation, "·Ó¼Ô´¨éÒ"
End If
End Sub
' ¿Ñ§¤ìªÑè¹·Õèãªé㹡ÒõÃǨÊͺ¡Ò÷ÓẺ·´Êͺ ... ¤ÃºµÒÁ·Õè¡Ó˹´äÇéáÅéÇËÃ×ÍäÁè
' ãËéÃѺ¤èÒ¤Ðá¹¹·Õèä´éà¢éÒÁÒ ... ËÒ¡ä´é¤ÃºµÒÁ¡Ó˹´ (3 ¢éÍ) ãËé¤×¹¤èÒ¨ÃÔ§ (True) ¡ÅѺä»
Function CheckScore(ByRef TotalScore As Integer) As Boolean
If TotalScore = 3 Then
' ãËé¡ÓÅѧ㨠áÅÐ á¨é§ÃÒ§ҹ¼Å¡Ò÷ÓẺ·´Êͺ
MsgBox "·Óä´é¶Ù¡µéͧËÁ´àÅ ... ˹Ùà¡è§¨Ñ§àŤèÐ." & vbCrLf & _
"ãªéàÇÅÒ·Ñé§ÊÔé¹ : " & FormatDateTime(Time - StartTime, vbLongTime), _
vbOKOnly + vbInformation, "¨ºâ»Ãá¡ÃÁ"
CheckScore = True
Else
CheckScore = False
End If
End Function
|