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

หรือติดต่อเข้ามาทาง 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
 5 1 2 8 4 5 4

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

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

การทำ Progress Bar แบบบ้านๆ เมื่อศาสตร์และศิลป์มารวมกันได้อย่างลงตัว

Category »  VB 6/VB.Net
โดย : Webmaster เมื่อ 21/7/2552   เวลา: 15:12
(อ่าน : 22568) 
ตัวผมเองศึกษาความรู้ทางด้านคอมพิวเตอร์ ทั้งฮาร์ดแวร์ และ ซอฟท์แวร์ ในลักษณะของ "การเรียนรู้นอกระบบ รบกันนอกตำรา" ... คิดเอง ฝึกเอง ทำเอง ... ดังนั้นสิ่งที่ผมพยายามถ่ายทอดออกมา ผมก็มองในแง่มุมของนักปฏิบัติ เพราะผมไม่ได้มาจากสาย วิชาเกิน เอ้ย วิชาการ เฉกเช่นหัวข้อนี้ ที่ผมนำมาใช้ฝึกน้องๆที่หื่นกระหาย อยากได้ความรู้ไปจากผมซ่ะเหลือเกิน (ในแต่ละปีจะมีเพียงไม่กี่คนหรอกครับ) ... เป็นเรื่องของ Progress Bar Control ซึ่งเป็นตัวแถบแสดงสถานะให้กับผู้ใช้ เช่น ปริมาณการคัดลอกข้อมูล แต่งานนี้ผมเอา Control มาตรฐาน Shape โดยไม่ต้องเรียกใช้ไฟล์ OCX อื่น (แต่หากอยากใช้ Progress Bar คุณต้องเรียกใช้งาน OCX เพิ่ม) จากนั้นนำมาลงโค้ด ผสมกับหลักการทำภาพเคลื่อนไหว (อ่านรายละเอียดเพิ่มเติม ... ที่นี่) ... ผมเองไม่อยากจะสาระแน แจกแจงอะไรไปมากกว่านี้ ขอให้ท่านที่ได้เข้ามาอ่าน ลองคิดเพิ่มเติมซิครับ ... คุณได้อะไรไปจากบทความตอนนี้บ้างล่ะครับ (ซึ่งมันเป็นทั้งเวลา และ เงินทองของผมด้วยน่ะ ... 55555+)
    หลักการ และ แนวคิด

    จัดเรียง Shape1(0), Shape1(1), ...... Shape1(9) จนครบ 10 ตัว
  • กำหนดให้มี Shape (รูปสี่เหลี่ยมผืนผ้า) ทั้งหมด 10 ตัว โดยให้มีชื่อเดียวกัน (คุณสมบัติ Name) และอาศัย Index ในการอ้างอิงถึง คือ Shape1(0), Shape1(1), ... Shape1(9)
  • ให้ Shape ทั้ง 10 ตัว ถูกปิดการมองเห็น คือ Shape1(Index).Visible = False
  • ตั้งค่า Timer1 ให้ทำงานทุกๆ 150 มิลลิวินาที เพื่อทำการเปิดการแสดงผล (Visible) ของ Shape1 ทีละตัวจนครบ 10 ตัว
    หลักการทำภาพนิ่งให้เป็นภาพเคลื่อนไหว
  • การนำภาพนิ่งที่มีการเปลี่ยนแปลงทีละเล็กละน้อยมาเรียงต่อกัน ทำให้เสมือนเกิดเป็นภาพเคลื่อนไหวได้ พูดง่ายๆก็คือ "ภาพมันหลอกสายตาเรานั่นเองแหละครับ" หากอธิบายแบบหลักวิชาการก็คือ เนื่องมาจากการกระพริบตาในแต่ละครั้งของคนเรา ช้ากว่า หรือ ไม่ทันพอ ที่จะมองเห็นการเปลี่ยนแปลงอย่างรวดเร็วของภาพนิ่ง จึงทำให้เรามองเห็นภาพนิ่งกลายเป็นภาพเคลื่อนไหวได้
     
ดาวน์โหลด
ดาวน์โหลด Source Code สำหรับ MS Visual Basic 6.0 - Service Pack 6
 ดาวน์โหลด Visual Basic 6.0 SP5: Run-Time Redistribution Pack
 ดาวน์โหลด Microsoft Data Access Object (MDAC) และ Jet 4.0 Update
 ดาวน์โหลด Microsoft Visual Basic Service Pack 6
ข้อมูลเพิ่มเติม
การใช้งาน SwishMax กับการทำภาพเคลื่อนไหว ... พื้นฐานสุดๆ จนแทบไม่อยากเชื่อ
  • ออกแบบโปรแกรม (Design - Time)

    จัดเรียง Shape1(0), Shape1(1), ...... Shape1(9) จนครบ 10 ตัว
  • ก่อนกดปุ่มทดสอบ
  • เมื่อ Shape1(1).Visible = True (ตัวที่ 2)

  • เมื่อ Shape1(2).Visible = True (ตัวที่ 3)

    ทุกๆ 150 มิลลิวินาที (เราตั้งจาก Timer1.Interval) จะทำให้ Shape1 ค่อยๆเปิดให้มองเห็นทีละตัวจนครบ 10 ตัว (0 - 9)
    เมื่อภาพนิ่ง เกิดการเปลี่ยนแปลงของแต่ละภาพไปเล็กน้อย และการกระพริบตาของเราในแต่ละครั้งไม่ทันต่อการเปลี่ยนแปลงของภาพนิ่ง จึงสามารถทำให้มันหลอกสายตาของเรา ให้มองเห็นเป็นภาพเคลื่อนไหวได้นั่นเอง โอว ว้าววว Amazing in VB6 Programming
    เริ่มต้นกระบวนการทำงาน
    
    Option Explicit
    
    ' ประกาศตัวแปรแบบ Public ให้มองเห็นทั่วทั้งฟอร์ม
    Dim Num  As Byte
    ' หรือ ...
    'Public Num As Byte
    
    Private Sub cmdOK_Click()
        ' สั่งให้ Timer1 ทำงาน
        Timer1.Enabled = True
        ' กำหนดขนาดแสดงผลฟอร์มใหม่แบบ Run Time
        Me.Height = 705
        Me.Width = 4920
    End Sub
    
    Private Sub Form_Load()
        Me.Move (Screen.Width - Width) \ 2, (Screen.Height - Height) \ 2
        
        For Num = 0 To 9
            Shape1(Num).Visible = False
        Next
        
        ' กำหนดค่าเริ่มต้นให้กับตัวแปร Num เพื่อความแน่ใจว่ามันเริ่มจาก 0 จริงๆ
        Num = 0
        
        ' กำหนดระยะเวลา หรือ ความเร็ว หน่วยเป็น Millisecond
        ' 1000 Millisecond = 1 Second (วินาที)
        Timer1.Interval = 150
        ' นั่นคือ ทุกๆ 150 ms. มีการแยกร่าง หรือ โปรเซส เพื่อวิ่งไปทำงานในโปรแกรมย่อย Timer1_Timer แต่ ...
        ' ทั้งนี้ทั้งนั้น ต้องขึ้นกับคำสั่งข้างล่างนี้ด้วย นั่นคือ Timer1.Enabled ต้องเป็น True เท่านั้น
        ' แต่ในขณะนี้ต้องปิดการทำงานไว้ก่อนน่ะครับ
        Timer1.Enabled = False
    End Sub
    
    ' ========================================================
    ' ส่วนของ Timer1 จะถูกกระตุ้นการทำงาน ตามเวลาที่ตั้งเอาไว้
    ' ========================================================
    Private Sub Timer1_Timer()
    
        ' ========================================================
        ' จากจุดนี้ พี่น้องสามารถเขียนเงื่อนไขได้หลายแบบเลยน่ะครับ ... เช่น
        ' ใช้ Loop เข้ามาช่วย ... ลองใส่ติ่งไอเดียของตัวเองแก้ไขดูครับผม
        ' ========================================================
        
        If Num > 9 Then
            ' หากมากำหนด Num = 0  ก่อนลูป For ข้างล่างจะเกิดอะไรขึ้น
            'Num = 0
            
            ' ปิดการแสดงผลของ Shape ทุกตัว ...
            ' โดยผมเอาตัวแปร Num เวียนมาใช้งานก่อน เพื่อที่ไม่ต้องประกาศตัวแปรเพิ่มใหม่
            ' เสี้ยวหนึ่งของการทำ Optimized ระหว่างการโค้ด ... แต่ต้องระมัดระวังเรื่องของ
            ' L O G I C A L  E R R O R - คือ ผลลัพธ์ผิดไปจากที่ต้องการด้วยครับ ... พี่น้อง
            For Num = 0 To 9
                Shape1(Num).Visible = False
            Next
            
            ' เมื่อทดสอบให้ Num = 0 อยู่ด้านบน บรรทัดข้างล่างต้อง Comment เอาไว้ก่อนน่ะครับ
            ' แล้วลองดูผลลัพธ์ของการวางตำแหน่ง Num ทั้งคู่ดูด้วยว่ามีผลต่างหรือเหมือนกันอย่างไร
            Num = 0
            
            ' ปรับขนาดหน้าจอกลับสู่สภาพเดิม
            Me.Height = 1290
            Me.Width = 4920
            
            cmdOK.Visible = True
            
            ' ปิดการทำงานของ Timer1
            Timer1.Enabled = False
            
        ' ================================================
        ' เงื่อนไขที่ตัวแปร Num มีค่า 0 - 9
        ' ================================================
        Else
            cmdOK.Visible = False
            
            ' เริ่มต้นปฏิบัติการแสดงผล Shape ทีละตัว
            Shape1(Num).Visible = True
            
            ' เพิ่มค่าขึ้น 1 (Increment) ... หากลดค่าลงจะใช้คำว่า Decrement
            Num = Num + 1
        End If
    
    End Sub
    
    Conclusion:
    บางคนอาจจะมองว่าเป็นเรื่องไร้สาระ (ว่ะ) เสียเวลาเปล่า ... เนื่องจากสิ่งที่คุณเห็นอยู่นี้ มันคือตัวอักษร และยิ่งมาถึงในส่วนสรุป หรือ ลงท้าย ผมเองก็ล้ามือในการพิมพ์ด้วยน่ะ 55555+ ... การพูดบรรยายจะได้ครบรส ครบเรื่องมากกว่าการอ่าน เป็นไหนๆครับ ... ประโยชน์จากบทความนี้ ผมสื่อไปถึง สำหรับผู้ที่กำลังฝึกฝน ให้ได้รู้จักคิด รู้จักหาไอเดีย หรือแนวทางของตัวเองในการเรียนรู้ พัฒนา อย่าเพียงมุ่งหวังแต่เกาะตำราหากินอย่างเดียวเลย ...

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