หากมีคำถาม ขอให้ไปโพสต์ลง เว็บบอร์ดจีทูจีเน็ตดอตคอม ตัวใหม่แทนน่ะครับ

หรือติดต่อเข้ามาทาง Inbox ที่ เฟซบุ๊ค ผมครับ

หน้าหลัก
ข่าวสาร - บทความ ทั้งหมด
VB 6/VB.Net
ASP/ASP.Net
จับฉ่ายคอมพิวเตอร์
เรียนรู้ผ่าน Flash Movie
บทความที่มีผู้ตอบล่าสุด  
 RSS Feeds
 ดาวน์โหลดโปรแกรม RSS Reader ได้ที่นี่ ...   Download โปรแกรม RSS Reader

Forum - www.g2gnet.com
Webmaster - www.g2gnet.com
Visitors - Session views
 4 9 8 1 3 7 4

7 ธันวาคม พ.ศ.2549
833 Users On-Line.
Visitors - Page views
 8 2 3 9 6 2 8
1 กุมภาพันธ์ พ.ศ.2551

Google   
เว็บ g2gnet.com
ขนาดตัวอักษร:  

การใช้งาน Drag & Drop ใน VB 6 เพื่อพัฒนาสื่อการเรียน การสอน (ภาค 2)

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 11/3/2552   เวลา: 05:05
(อ่าน : 13476) 
CodeJock Web Siteอย่างที่สรุปเอาไว้ในตอนที่แล้วแหละครับพี่น้อง ... ผมเองใช้ทั้งงบส่วนตัว ใช้ทั้งเวลาทำมาหากินของตัวเอง ในการเผยแพร่ข้อมูลออกมาเพื่อเป็นแนวทาง และ สร้างแรงกระตุ้น แรงจูงใจให้กลุ่มครูอาชีพ ซึ่งผมคิดว่าครู อาจารย์หลายต่อหลายท่าน คงไม่ได้มีโอกาสสัมผัสกันมากนัก เพราะแหล่งข้อมูลพวกนี้มันมีน้อยมากๆ คือ แนวทาง หลักกา่ร ทฤษฎีมีเพียบ แต่ครั้นพอมาดูทางปฏิบัติล่ะ ... หุๆๆๆๆ ... ดิ้นรนขุดหากันเอาเองแทบทั้งนั้น ... พอส่งบทความภาค 1 ออกไปปั๊บ อาจารย์ท่านหนึ่งที่ติดตามบทความของผมมาโดยตลอด และคอยให้ผมตรวจปรับงานให้ แกก็ Chat มาขอหลักการสุ่มแบบทดสอบทันที ผมก็เลยถามกลับไป (เล่นๆ) ว่าเจ้านายของอาจารย์คือใคร ... ทางโน้นตอบกลับมา "เจ้านายผม คือ ลูกศิษย์ของผมเอง" ... โห ... โดนใจครับพี่น้อง นานๆครั้งจะมีคนตอบแบบนี้สักที 55555+ ... เพราะปกติมักจะไล่เรียงไปว่าท่านนั้น ซีโน้น ขั้นนี้ คือเจ้านาย (สายตรง) เหอๆๆๆ ... อย่ากระนั้นเลย อย่างนี้มันต้องถอนๆๆ เอ้ย เอาโค้ดเต็มๆไปฝึกฝนกันเลยดีกว่า ... (ลงโค้ดไม่ถึง 10 นาที แต่ใช้เวลาเขียนคำอธิบายเป็นชั่วโมง 55555+)
ดาวน์โหลด - กรณีที่ติดตั้งโปรแกรม MS Visual Basic 6.0 (SP6) เรียบร้อยแล้ว
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ดาวน์โหลด - กรณีที่ไม่ได้ติดตั้งโปรแกรม MS Visual Basic 6.0 (SP6)
ดาวน์โหลดโปรแกรมแบบทดสอบการจับคู่ด้วยวิธีการสุ่ม (EXE File)
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลดชุดติดตั้งโปรแกรม Microsoft Visual Basic 6.0 Enterprise Edition (หากไม่คิดจะเขียนโปรแกรมด้วย VB6 ก็ไม่ต้องดาวน์โหลดก็ได้ครับกระผม)
เรื่องที่เกี่ยวข้อง
การใช้งาน Drag & Drop ใน VB 6 เพื่อพัฒนาสื่อการเรียน การสอน (ภาค 1)
โปรแกรมสุ่มตัวเลขจำนวนเต็มแบบไม่ให้ซ้ำกันเลย - Random Number
การประยุกต์ใช้งาน MS Visual Basic 6.0 กับการพัฒนาสื่อการเรียนการสอน
เริ่มต้นกระบวนการทำงาน - ใช้ 5 ตัวเลือกเพื่อให้ได้มองเห็นภาพการสุ่มตัวเลขได้ชัดเจน

Design Time - ออกแบบหน้าตาหน้าจอ


Design Time - การหาตำแหน่งของ Control
คลิ๊กเลือก Control ที่ต้องการ ... ให้ดูตำแหน่งของ Control ทางด้านบนขวา (แสดงตำแหน่งซ้าย และ ขอบบนซ้ายของ Control)


Run Time - แบบสุ่มค่าการวางตำแหน่ง


Run Time - แบบสุ่มค่าการวางตำแหน่ง


แจ้งผลการทดสอบ ... รายงานเวลาที่ใช้
ตรงนี้แหละที่จะนำไปพัฒนาต่อในการจัดเก็บข้อมูล เพื่อใช้ในการประเมินแบบทดสอบต่อไป
หากเป็นโจทย์จริงๆ ... มันสามารถประเมินผลในตัวของมันเองได้แหละว่าโจทย์ที่ตั้งมันง่าย/ยาก หรือ สอนเด็กได้รู้เรื่องหรือไม่ ... เอิ๊กๆๆๆๆ
มาดูโค้ดกันเถอะ ...

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 BlueFlag As Boolean
Dim YellowFlag As Boolean

' ตัวแปรสำหรับตรวจสอบการทำแบบทดสอบได้ถูกต้องหมดแล้วหรือไม่
Dim TotalScore As Integer

' ตัวแปรใช้เก็บเวลาเริ่มต้นการทำแบบทดสอบ
Dim StartTime As Date

' ตัวแปรสำหรับการสุ่มตัวเลข
Dim MAXNUM As Integer   ' จำนวนตัวเลขสูงสุด
Dim Flag()
Dim TempRandom()          ' Array เก็บไว้ทดสอบไม่ให้มีค่าซ้ำ
Dim TempRandomAll()     ' Array สุ่มตัวเลขออกมาทั้งหมดเรียบร้อยแล้ว
Dim blnFlag As Boolean

Private Sub Form_Load()
    
    Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
    TotalScore = 0
    ' กำหนดไว้เป็นเท็จ ... เพื่อให้รู้ว่ามันยังไม่ได้ถูกลากไปวางตรงตามตำแหน่ง
    RedFlag = False
    GreenFlag = False
    BlackFlag = False
    BlueFlag = False
    YellowFlag = False
    
    ' เริ่มต้นจับเวลา
    StartTime = FormatDateTime(Now(), vbLongTime)
    
    ' เราควรสุ่มตำแหน่งของวัตถุต่างๆก่อน ... น่าจะดีกว่า เพื่อไม่ให้เด็กเกิดการจดจำได้
    ' ระบุจำนวนตัวเลขสูงสุดในการสุ่ม นั่นคือจะได้ค่าเลขจำนวนเต็มบวกระหว่าง 1 - 5
    MAXNUM = 5
    
    ' สุ่มค่าเริ่มต้นก่อน
    RandShuffle Date$ + Time$ + Str$(Timer)
    
    ' กำหนด Array ขนาด 5 แถว 2 หลัก
    ' จำนวนป้าย 5 ตัว (แถว) ... ส่วน 2 หลักจะเก็บตำแหน่งซ้าย และ บนของป้ายแต่ละตัว
    Dim Position(1 To 5, 1 To 2) As Integer
    Dim i As Byte
    
    ' กำหนดตำแหน่งต่างๆของป้าย (Label) เอาไว้ล่วงหน้า
    Position(1, 1) = 120    ' ตำแหน่งซ้าย (Left) ของป้ายที่ 1
    Position(1, 2) = 510    ' ตำแหน่งบน (Top) ของป้ายที่ 1
    Position(2, 1) = 1590   ' ตำแหน่งซ้าย (Left) ของป้ายที่ 2
    Position(2, 2) = 510    ' ตำแหน่งบน (Top) ของป้ายที่ 2
    Position(3, 1) = 3060   ' ตำแหน่งซ้าย (Left) ของป้ายที่ 3
    Position(3, 2) = 510    ' ตำแหน่งบน (Top) ของป้ายที่ 3
    Position(4, 1) = 4500   ' ตำแหน่งซ้าย (Left) ของป้ายที่ 4
    Position(4, 2) = 510    ' ตำแหน่งบน (Top) ของป้ายที่ 4
    
    Position(5, 1) = 5970   ' ตำแหน่งซ้าย (Left) ของป้ายที่ 5
    Position(5, 2) = 510    ' ตำแหน่งบน (Top) ของป้ายที่ 5
    ' สังเกตว่าตำแหน่งของ Top จะมีค่าเท่าเดิม (ตำแหน่งบนซ้าย 510 เท่ากันหมด)
    ' ดังนั้นแล้วเราสามารถใช้ Array 1 มิติก็ได้น่ะครับ นั่นคือ Position = (120, 1590, 3060, 4500, 5970)
    
    ' ในส่วนของการสุ่มตัวเลขนี้ พี่น้องแทบไม่ต้องไปสนใจกระบวนการทำงานของมันก็ได้
    ' แค่ให้รู้ว่า เรากำหนดค่าสูงสุดเอาไว้ที่ MAXNUM เอาไว้แล้ว
    ' จากนั้นค่าตัวเลขที่สุ่มจะถูกจัดเก็บไว้ใน Array
    ' เช่น (3, 5, 2, 1, 4) ... ซึ่งมันจะถูกเก็บไว้ในตัวแปร TempRandomAll ไว้เป็นที่เรียบร้อย
    Timer1_Timer
    
    ' วนรอบในการจัดวางตำแหน่งของ Label
    For i = 1 To 5
        ' อ่านค่าตัวเลขที่สุ่มได้จาก Array เช่นได้ค่า (3, 5, 2, 1, 4)
        ' TempRandomAll(เมื่อ i = 1) = 3 ... ค่าใน Array ตัวแรก
        ' TempRandomAll(เมื่อ i = 2) = 5 ... ค่าใน Array ตัวที่ 2
        ' TempRandomAll(เมื่อ i = 3) = 2 ... ค่าใน Array ตัวที่ 3
        ' TempRandomAll(เมื่อ i = 4) = 1 ... ค่าใน Array ตัวที่ 4
        ' TempRandomAll(เมื่อ i = 5) = 4 ... ค่าใน Array ตัวที่ 5
        Select Case TempRandomAll(i)
            ' จากค่าสมมุติด้านบน ค่าที่อยู่ใน Array ตัวแรก คือ 3 หรือ
            ' TempRandomAll(1) = 3 ... ต้องไปกรณี (Case) ที่เท่ากับ 3
            
            Case 1
                lblRed.Move Position(i, 1), Position(i, 2)
            
            Case 2
                lblGreen.Move Position(i, 1), Position(i, 2)
            
            Case 3
                ' ==================================================================
                ' ใช้ Move Method เพื่อระบุตำแหน่งของป้ายสีดำ หรือ
                lblBlack.Move Position(i, 1), Position(i, 2)
                ' lblBlack.Move Postion(1, 1), Position(1, 2) หรือ
                ' lblBlack.Move 120, 510
                ' ตอนกำหนดตำแหน่งดูให้ดีด้วยครับว่า ผมใช้ตัวแปร i ... ไม่ได้ใช้ค่าใน TempRandomAll(i) แล้วน่ะครับ
                ' นั่นคือ ป้ายสีดำ จะย้ายไปอยู่ที่ตำแหน่งเดิมของป้ายสีแดงแทน (นี่แหละคือการสุ่มตำแหน่งการวางของวัตถุ)
                ' ==================================================================
        
            Case 4
                lblBlue.Move Position(i, 1), Position(i, 2)
            
            Case 5
                lblYellow.Move Position(i, 1), Position(i, 2)
        End Select
    Next
    
    ' จะสังเกตได้เลยว่า ... โค้ดในส่วนของการ Drag & Drop หรือ การตรวจคำตอบ เราไม่ได้เข้าไปแก้ไข เพิ่มเติมแต่ประการใด
    
End Sub

' การสุ่มตัวเลขจำนวนเต็ม ... แทบไม่ต้องไปสนใจมันก็ได้น่ะครับ
Private Sub Timer1_Timer()
Dim k As Variant
Dim n As Integer
Dim i As Integer, j As Integer
ReDim Flag(MAXNUM)
ReDim TempRandom(MAXNUM)
ReDim TempRandomAll(MAXNUM)

    ' ตรวจสอบทุกครั้งที่มีการสุ่ม
    For i = 1 To MAXNUM
        ' Flag is True if already random and fix Vaule
        If Flag(i) = False Then
            ' Generate unique number
            Do
                ' Generate any number in range
                n = RandInteger(1, MAXNUM)
        
                'Previously grabbed?
                blnFlag = True
                For j = 1 To i
                    k = TempRandomAll(j)
                    If j < i And n = k Then
                        blnFlag = False
                        Exit For
                    End If
                Next
            
                ' Grab only if number is unique
                If blnFlag = True Then
                    TempRandom(i) = n
                    TempRandomAll(i) = n
                End If
            Loop Until blnFlag = True
        End If
    Next
End Sub
Conclusion:
สำหรับแบบทดสอบที่ผมได้ทำมาให้ดูเป็นตัวอย่างนี้ ลองไปเพิ่มเติมให้สุ่มตำแหน่งของคำตอบได้ด้วยเช่นเดียวกันซิครับ ไม่ยากนักหรอก หรือแก้ไขจากปุ่ม CommandButton ให้เป็นรูปภาพแทนซ่ะ ... และก็ขอให้ท่านทั้งหลายได้ลองศึกษาเรื่องของฐานข้อมูลเพิ่มเติมเผื่อเอาไว้ด้วยน่ะครับ เพราะรอบหน้าผมจะเข็นบทความของการสุ่มแบบทดสอบจริงๆ ออกมาจากฐานข้อมูล ให้ครูอาชีพทั้งหลายได้รับชมกันต่อไป ...

จี ทู จี เน็ต ดอต คอม - g2gNet Dot Com
เลขทะเบียนพาณิชย์อิเล็กทรอนิกส์ 0407314800231
CopyLeft © 2004 - 2099 g2gNet.Com All rights reserved.
Email: [email protected] หรือ โทร. 08-6862-6560