วันพฤหัสบดีที่ 15 กันยายน พ.ศ. 2554

ฟังก์ชันของเมาส์และคีย์บอร์ด ภาค1

เมาส์และคีย์บอร์ดเป็นหน่วยรับข้อมูล (Input unit) ที่สำคัญของคอมพิวเตอร์ในระบบปฏิบัติการ Windows ซึ่งจะทำหน้าที่ติดต่อระหว่างผู้ใช้กับคอมพิวเตอร์ ดังนั้นการเขียนโปรแกรมควบคุมหรือการจำลองการทำงานของเมาส์และคีย์บอร์ดจึงเป็นอีกแนวทางหนึ่งในการเพิ่มความสามารถโปรแกรมของเราให้มีการทำงานแบบอัตโนมัติได้ในระดับหนึ่ง เช่น การคลิกเมาส์แบบอัตโนมัติ, การกดคีย์บนแป้นพิมพ์คีย์บอร์ด, การตรวจสอบการกดคีย์บอร์ดและการเลื่อนเคอร์เซอร์ เป็นต้น
เมาส์และคีย์บอร์ด
                ในบทนี้เราจะได้เรียนรู้การเขียนโปรแกรมควบคุมการทำงานของเมาส์และคีย์บอร์ดโดยการเรียกใช้โพรซีเยอร์ของ Visual Basic และการใช้ฟังก์ชัน API ของ Window ซึ่งในตอนต้นเราจะศึกษาโพรซีเยอร์พื้นฐานของเมาส์ (Mouse event) และคีย์บอร์ด (Keyboard event) ของ Visual Basic เช่น เหตุการณ์ที่เกิดขึ้นเมื่อมีการกดปุ่มเมาส์, เหตุการณ์ที่เกิดจากการเลื่อนเคอร์เซอร์และเหตุการณ์ที่เกิดเมื่อมีการกดคีย์ใด ๆ บนแป้นพิมพ์คีย์บอร์ด ซึ่งเราจะใช้เหตุการณ์เหล่านี้มาเป็นเงื่อนไขสำหรับเขียนโปรแกรมควบคุมการทำงานของคอนโทรลต่าง ๆ ของ Visual Basic และเปรียบเทียบการตอบสนองเหตุการณ์ของคอนโทรลชนิดต่าง ๆ เมื่อมีการคลิกหรือดับเบิลคลิก จากนั้นเราจะศึกษาเกี่ยวกับฟังก์ชัน API (Application Programming Interface) ของ Windowsรวมถึงฟังก์ชัน API ที่เกี่ยวข้องกับเมาส์และคีย์บอร์ด ซึ่งเป็นส่วนสำคัญที่เราจะนำไปใช้ในการเขียนโปรแกรม Auto click ในบทที่ 4
ในตอนท้ายของบทเราจะได้เรียนรู้การเขียนโปรแกรมการจำลองการทำงานของเมาส์และคีย์บอร์ด เช่น การแดรกไฟล์, การดรอปไฟล์, การคลิกและการเปิดไฟล์ด้วยการดับเบิลคลิก, โปรแกรมคีย์บอร์ดจำลอง (Visual Keyboard) สำหรับการตรวจจับการทำงานของคีย์บอร์ด และโปรแกรม Key Logger สำหรับการดักจับการใช้คอมพิวเตอร์ เพื่อให้คุ้นเคยกับคำศัพท์ของการเขียนโปรแกรม ผู้เขียนจะใช้ศัพท์ภาษาอังกฤษ “Mouse event” แทน “เหตุการณ์ของเมาส์” และ “Keyboard event” แทน “เหตุการณ์ของคีย์บอร์ด”
เหตุการณ์ของเมาส์ (Mouse Event) ใน Visual Basic
                Mouse event คือเหตุการณ์ที่เกิดขึ้นเมื่อเรากดเมาส์ (ปุ่มซ้าย, ปุ่มขวาหรือปุ่มกลาง) และการเลื่อนเคอร์เซอร์บนฟอร์มหรือคอนโทรลในขณะที่เรารันโปรแกรม Visual Basic
Visual Basic มีโพรซีเยอร์ Mouse event สำหรับฟอร์มและคอนโทรลต่าง ๆ 3 เหตุการณ์ คือ MousDown, MouseUp และ MouseMove โดยมีเงื่อนไขการการเกิด Mouse event ดังรายละเอียดดังนี้
1.    เคอร์เซอร์จะต้องอยู่บนฟอร์มหรือคอลโทรลที่ต้องการให้เกิดเหตุการณ์และจะเกิดขึ้นกับคอนโทรลเพียงตัวเดียวเท่านั้น
 จะเกิดแยกกันระหว่างฟอร์มและคอนโทรลลาเบลฟอร์มหรือคอลโทรลจะต้องอยู่ในสถานะ Enable
 
รูปแบบของโพรซีเยอร์ Mouse Event

Private Sub ชื่ออ๊อบเจ็คต์_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
...
End Sub
Private Sub ชื่ออ๊อบเจ็คต์_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
...
End Sub
Private Sub ชื่ออ๊อบเจ็คต์_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
...
End Sub

อธิบายพารามิเตอร์ของโพรซีเยอร์ Mouse Event
Button เป็นพารามิเตอร์ชนิด Integer ใช้แสดงค่าของเมาส์เมื่อถูกกด ซึ่งค่า Button จะแทนด้วยตัวเลขฐาน 16 หรือค่าคงที่เรียกเฉพาะ ซึ่งมีรายละเอียดดังนี้

ค่าคงที่
ค่าของปุ่มเมาส์
คำอธิบาย
VbLeftbutton
1
ปุ่มเมาส์ซ้ายถูกกด
VbRightbutton
2
ปุ่มเมาส์ขวาถูกกด
VbMiddlebutton
3
ปุ่มเมาส์กลางถูกกด
               
ในกรณีที่เรากดเมาส์พร้อมกันหลายปุ่ม เราสามารถนำค่า Button มากันรวมได้ เช่น กดปุ่มเมาส์ซ้ายและปุ่มเมาส์ขวา จะได้ว่าค่า Button เท่ากับ 1 + 2 = 3
                Button เป็นค่า Virtual Key Code ซึ่งเป็นค่าคงที่มาตรฐานของเมาส์และคีย์บอร์ดในระบบปฏิบัติการ Windows ซึ่งเราจะได้ศึกษารายละเอียดและใช้งานต่อไปในหัวข้อเมธอด Sendkeys ของและฟังก์ชัน API GetKeyState

Note:
1. Virtual Key Code เป็นค่าคงที่ของเมาส์และคีย์บอร์ดมีค่าตั้งแต่ 0 ถึง 254 (ดูเพิ่มเติมในตาราง Virtual Key Code ในภาคผนวก)

0000 0XYZ
2. ถึงแม้ว่า Button จะเป็นพารามิเตอร์แบบ Integer แต่เนื่องจากใช้สำหรับเก็บค่า Virtual Key Code ซึ่งเป็นพารามิเตอร์ระดับบิต ดังนั้น Button จึงมีข้อมูล 3 บิตแรกเป็นค่า Vitual Key Code ของเมาส์ ซึ่งสามารถอธิบายได้ดังนี้
                                                                          

  บิตที่ 1(Z) แทนค่า VbLeftbutton ซึ่งมีค่าสะถานะเป็น 0000 0001 หรือเท่ากับ 1 ในเลขฐาน 16
  บิตที่ 2(X) แทนค่า VbRightbutton ซึ่งมีค่าสะถานะเป็น 0000 0010 หรือเท่ากับ 2 ในเลขฐาน 16
  บิตที่ 3(Y) แทนค่า VbMiddlebutton ซึ่งมีค่าสะถานะเป็น 0000 0100 หรือเท่ากับ 4 ในเลขฐาน 16
            ดังการกดปุ่มเมาส์พร้อม ๆ กันจึงสามารถนำค่าระดับบิตมารวม (OR) กันทางตรรกศาสตร์ได้

Shift เป็นพารามิเตอร์ชนิด Integer เช่นกัน ใช้สำหรับแสดงสถานะของคีย์ Shift, Ctrl และ Alt ขณะที่เกิด Mouse event ซึ่งค่า Shift จะแทนด้วยตัวเลขฐาน 16 หรือค่าคงที่เรียกเฉพาะ ซึ่งมีรายละเอียดดังนี้

ค่าคงที่
ค่าของสถานะ
คำอธิบาย
VbShiftbutton
1
ปุ่ม Shift ถูกกดขณะเกิด Mouse event
VbCtrlbutton
2
ปุ่ม Ctrl ถูกกดขณะเกิด Mouse event
VbAltbutton
4
ปุ่ม Alt ถูกกดขณะเกิด Mouse event

                ค่า Shift สามารถนำมารวมกันได้เช่นเดียวกับ Button เ ช่น กดคีย์ Shift และคีย์ Ctrl พร้อมกันค่าของ Shift รวมเท่ากับ 1+2 = 3

Note:
เหตุการณ์ MouseDown จะเกิดขึ้นเมื่อมีการกดปุ่มเมาส์
เหตุการณ์ MouseUp จะเกิดเหตุการณ์เมื่อ MouseDown สิ้นสุดลง(ปล่อยเมาส์)
เหตุการณ์ MouseMove จะเกิดเมื่อเคอร์เซอร์เลื่อนบนฟอร์มหรือคอนโทรล

X และ Y คือพิกัดปัจจุบัน X และ Y ของเคอร์เซอร์ ขณะที่เคอร์เซอร์อยู่บนฟอร์มหรือคอนโทรล

ตัวอย่างที่ 1 MouseDown Event
1. การทำงานของโปรแกรม
            ตัวอย่างนี้เป็นการทดสอบการเกิด Mouse Down event ของฟอร์ม เมื่อเรากดปุ่มเมาส์ลงบนฟอร์มจะมีข้อความ “mouse down” และค่า Button พิมพ์ลงบนฟอร์ม

อ๊อบเจ็กต์
พร็อพเพอร์ตี้
ค่าที่กำหนด
Form1
Name
frmMain
Caption
ทดสอบ MouseDown event
Border Style
5 – Sizable ToolWindow

2. โค้ดของโปรแกรม

Option Explicit
 Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
CurrentX = X     'กำหนดตำแหน่งพิกัด X ปัจจุบัน = X
CurrentY = Y     'กำหนดตำแหน่งพิกัด Y ปัจจุบัน = Y
Print "mouse down" &” ค่า Button= " & Button & " ค่า X= " & X & " ค่า Y = “& Y
End Sub

3. รันโปรแกรม
           
1. รันโปรแกรม จากนั้นให้เลื่อนเคอร์เซอร์บนฟอร์ม ขณะเดียวกันให้กดปุ่มเมาส์ค้างไว้ซักครู่ ณ ตำแหน่งใด ๆ แล้วจึงปล่อย จะเห็นว่ามีข้อความ, ค่า Button และพิกัดของเคอร์เซอร์ถูกพิมพ์ลงบนฟอร์ม


4. อธิบายโปรแกรม
1.  เนื่องจากเราใช้เหตุการณ์ MouseDown เป็นเงื่อนไขของการพิมพ์ข้อความลงบนฟอร์ม ดังนั้นข้อความจะถูกพิมพ์เมื่อมีการกดเมาส์ (ลง) เท่านั้น
2.  การกำหนดตำแหน่งของเคอร์เซอร์ปัจจุบัน (CurrentX, CurrentY) ให้เป็นค่าของ X และ Yตามลำดับ ดังนั้นเมื่อมีการกดเมาส์ลง ข้อความจึงถูกพิมพ์ลง ณ ตำแหน่งกดเคอร์เซอร์

CurrentX = X     'กำหนดตำแหน่งพิกัดเคอร์เซอร์ X ปัจจุบัน = X
CurrentY = Y     'กำหนดตำแหน่งพิกัดเคอร์เซอร์ Y ปัจจุบัน = Y

3.  ให้ผู้อ่านทดลองเปลี่ยนจากเหตุการณ์ MouseDown เป็น MouseUP จะสังเกตุว่าข้อความจะถูกพิมพ์ลงบนฟอร์มเมื่อเราปล่อยปุ่มเมาส์ ซึ่งตรงกันข้ามกับเหตุการณ์ MouseDown

ตัวอย่างที่ 2 Drawing Pad
1. การทำงานของโปรแกรม
            ตัวอย่างนี้เราจะสร้างกระดานวาดภาพ (Drawing Pad) แบบง่าย ๆ ซึ่งมีการทำงานงานคล้ายกับทูล ดินสอ (pencil) ของโปรแกรม Microsoft paint โดยการใช้ MouseDown event และ MouseMove event ของฟอร์มร่วมกับคำสั่งการวาดเส้น (Line) สำหรับการวาดเส้นลงบนฟอร์ม

อ๊อบเจ็คต์
พร็อพเพอร์ตี้
ค่าที่กำหนด
Form1
Name
frmDrawPad
Caption
Drawing Pad
Border Style
5 – Sizable ToolWindow
BackColor
vbWhite
Command Button1
Name
cmdClear
Caption
เคลียร์
Command Button2
Name
cmdExit
Caption
ออก

2. โค้ดของโปรแกรม

Option Explicit

Private Sub cmdClear_Click()
frmDrawPad.Cls  ‘เคลียร์ฟอร์ม
End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
CurrentX = X   'กำหนดตำแหน่งพิกัดเคอร์เซอร์ X ปัจจุบัน = X
CurrentY = Y   'กำหนดตำแหน่งพิกัดเคอร์เซอร์ Y ปัจจุบัน = Y
End Sub

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Line (CurrentX, CurrentY)-(X, Y)  ‘วาดเส้น
End If
End Sub

1.       รันโปรแกรม
1. รันโปรแกรม เลื่อนเคอร์เซอร์ไปบนฟอร์มพร้อมกับกดเมาส์ซ้ายค้างไว้ แล้วสังเกตุว่าจะมีเส้นเกิดขึ้นเมื่อเราลากเคอร์เซอร์ไปมา

4. อธิบายโปรแกรม
1.  ในขณะที่เกิด MouseDown event เราจะกำหนดค่าของ X และ Y ให้กับฟังก์ชัน CurrentX และ CurrentY ซึ่งจะเป็นจุดเริ่มต้นของเส้นที่เราจะวาดลงบนฟอร์ม

CurrentX = X  'กำหนดตำแหน่งพิกัดเคอร์เซอร์ X ปัจจุบัน = X
CurrentY = Y  'กำหนดตำแหน่งพิกัดเคอร์เซอร์ Y ปัจจุบัน = Y

2.  ในโพรซีเยอร์ของ MouseMove event เรากำหนดเงื่อนไขว่าถ้ามีการกดปุ่มเมาส์ซ้าย (ค่า Button = 1) ให้สร้างเส้นจากจุด CurrentX และ CurrentY ไปถึง X และ Y

If Button = 1 Then
Line (CurrentX, CurrentY)-(X, Y)  ‘วาดเส้นลงบนฟอร์ม
End If

3.  กดปุ่ม เคลียร์สำหรับลบเส้นที่พิมพ์บนฟอร์ม

frmDrawPad.Cls

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

วันเสาร์ที่ 3 กันยายน พ.ศ. 2554

คำสั่ง (Statement) และโพรซีเยอร์ (Procedure) ภาค3


การสร้างโพรซีเยอร์ทั่วไป (General Procedure)
            ถึงแม้ว่า Visual Basic จะมีชุดคำสั่งและฟังก์ชันมาตรฐานอยู่มากมายแต่ก็ยังไม่สามารถครอบคลุมการทำงานได้ทั้งหมด เราสามารถสร้างซับรูทีนหรือฟังก์ชันขึ้นมาใช้งานเองได้ ซึ่งแยกออกได้ 2 แบบใหญ่ ๆ คือ 
  • ซับรูทีน (Sub routine) มีลักษณะเหมือนกับคำสั่งมาตรฐานใน Visual Basic กล่าวคือ เป็นชุดคำสั่งที่ไม่มีการส่งค่ากลับ 
  • ฟังก์ชัน (Function) มีลักษณะเช่นเดียวกับฟังก์ชันมาตรฐานใน Visual Basic ซึ่งจะส่งค่ากลับออกมา 1 ค่าเสมอ
การสร้างซับรูทีน (Sub routine)
ซับรูทีนจะต้องขึ้นต้นด้วย Sub ตามด้วยชื่อของซับรูทีนนั้น ซึ่งมีโครงสร้างทั่วไป ดังนี้

[Private | Public] [Static] Sub name [(arglist  )]
[statements ]
[Exit Sub]
[statements ]
End Sub

คำสงวน Private หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมามีขอบเขตในการเรียกใช้งานเฉพาะฟอร์มหรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึง กำหนดให้ซับรูทีนที่สร้างขึ้นมาสามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ซับรูทีนเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานซับรูทีนครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเยอร์ทั่วๆ ไปแบบซับรูทีน
ตัวแปร name หมายถึง ชื่อของซับรูทีน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในซับรูทีน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในซับรูทีน
คำสั่ง Exit Sub หมายถึง บังคับให้ออกจากซับรูทีนนี้ทันที
คำสั่ง End Sub หมายถึง จบโพรซีเยอร์

ตัวอย่างนี้เป็นการตรวจสอบตัวเลขที่น้อยที่สุดใน Text1 และ Text2 โดยการเรียกใช้ซับรูทีน smallest

'ซับรูทีนนี้ต้องการอาร์กิวเมนต์ 2 ตัว คือ a และ b ซึ่งในตัวอย่างนี้ค่าใน Text1 และ Text 2 จะผ่านค่า
มาให้อาร์กิวเมนต์  2 ตัวนี้ตามลำดับ
Sub smallest(a As Integer, b As Integer)
Dim min As Integer
If a < b Then   ‘ถ้าค่าใน Text1 < Text 2
min = a
MsgBox "a is smaller  (a = " & Str(min) & ")"
ElseIf (a > b) Then  ‘ถ้าค่าใน Text1 > Text 2
min = b
MsgBox "b is smaller (b = " & Str(min) & ")"
Else
ถ้าค่าใน Text1 = Text 2
min = a
MsgBox "Both values are equal (a,b = " & Str(min) & ")"
End If
'เรียกใช้  
Private Sub Command1_Click()  
Dim x As Integer, y As Integer
x = Val(Text1.Text)
y = Val(Text2.Text)
Call smallest(x, y)  ‘เรียกใช้งานซับรูทีน smallest โดยใช้คำสั่ง Call
End Sub

การสร้างฟังก์ชัน (Function)
ฟังก์ชันจะต้องขึ้นต้นด้วย Function ตามด้วยชื่อของฟังก์ชันนั้น ฟังก์ชันเป็นโพรซีเยอร์ชนิดที่มีการคืนค่ากลับมาซึ่งต่างจากซับรูทีนที่ไม่มีการคืนค่า ฟังก์ชันมีโครงสร้างทั่วไป ดังนี้
[Public | Private] [Static] Function name [(arglist  )] As type
[statements ]
[Exit Function]
[statements ]
End Function
 
คำสงวน Private หมายถึง กำหนดให้ฟังก์ชันที่สร้างขึ้นมามีขอบเขตในการเรียกใช้งานเฉพาะฟอร์มหรือโมดูลที่ประกาศเท่านั้น
คำสงวน Public หมายถึงกำหนดให้ฟังก์ชันที่สร้างขึ้นมาสามารถถูกเรียกใช้งานได้ทุกส่วน
คำสงวน Static หมายถึง กำหนดให้ฟังก์ชันเก็บรักษาค่าที่ได้จากการประมวลผลไว้ เมื่อมีการเรียกใช้งานฟังก์ชันครั้งต่อๆ ไป ค่าดังกล่าวจะมีค่าเท่าเดิม
คำสั่ง Sub หมายถึง ต้องการสร้างโพรซีเยอร์ทั่วๆ ไป แบบฟังก์ชัน
ตัวแปร name หมายถึง ชื่อของฟังก์ชัน
ตัวแปร arglist หมายถึง อาร์กิวเมนต์ที่ต้องใช้ในฟังก์ชัน ซึ่งจะมีหรือไม่มีก็ได้
ตัวแปร As type หมายถึง ฟังก์ชันนี้ จะส่งข้อมูลชนิดใดกลับมา เช่น Integer, Long, Single เป็นต้น
ตัวแปร statements หมายถึง ชุดคำสั่งต่างๆ ในฟังก์ชัน
คำสั่ง Exit Function หมายถึง บังคับให้ออกจากฟังก์ชันนี้ทันที
คำสั่ง End Function หมายถึง จบโพรซีเยอร์

ต่อไปนี้เป็นตัวอย่างฟังก์ชันที่ชื่อว่า AddNum มีหน้าที่สำหรับบวกตัวเลข ต้องการอาร์กิวเมนต์ 2 ตัว โดยคืนค่ากลับเป็นข้อมูลชนิด Integer

Option Explicit
Function AddNum(x As Integer, y As Integer) As Integer
Dim z As Integer 'สำหรับรับค่าที่ได้จากการบวก
z = x + y 'นำอาร์กิวเมนต์ที่เข้ามา 2 ตัวบวกกัน แล้วเก็บไว้ที่ตัวแปร z
AddNum = z 'ถ่ายทอดค่าที่ได้ ไปยังฟังก์ชัน AddNum
End Function 'จบฟังก์ชันแล้วส่งค่ากลับ (ชนิดข้อมูลแบบ Integer) ไปยังโพรซีเยอร์ ที่เรียกใช้งานฟังก์ชันนี้

Private Sub Form_Activate()
Print AddNum(10, 20) 'แสดงผลลัพธ์ออกที่ฟอร์ม โดยเรียกใช้งานฟังก์ชัน AddNum และส่งอาร์กิวเมนต์เข้าไป 2 ตัว คือ 10 และ 20
End Sub

ตัวอย่างฟังก์ชัน (ข้อสอบวิชา Visual Basic)

จงแก้สร้างฟังก์ชันสำหรับแก้ปัญหานี้
1.       สร้างฟังก์ชันสำหรับการหาค่า factorial
2.       สร้างฟังก์ชันสำหรับการประมาณค่า sin(x) โดยกำหนดให้ฟังก์ชัน
แล้วเปรียบเทียบกับฟังก์ชันมาตรฐาน  Sin(Rad) และสังเกตุว่า n ที่น้อยที่สุดที่ทำให้การประมาณ sin(x) ใกล้กับ Sin(Rad) มีค่าเท่าใด



เฉลยตัวอย่างฟังก์ชัน


1.       สร้างฟังก์ชันสำหรับการหาค่า factorial


Option Explicit
Function Factorial(n As Integer) As Long
Dim i As Integer
If n < 1 Then
MsgBox (“Error – Please try again”)
Else
Factorial = 1
For i =1 to n
Factorial = Factorial * i
Next i
End If
End Function

Private Sub Command1_Click()
Dim n As Integer, nFact As Long
N = Val(Text1.Text)
nFact = Factorial(n)
Text2.Text = Str(nfact)
End Sub



2.       สร้างฟังก์ชันสำหรับการประมาณค่า sin(x)



สร้างฟังก์ชัน Factorial
Function Factorial(n As Integer) As Long
Dim i As Integer
If n < 1 Then
Beep
MsgBox (“Error – Please try again”)
Else
Factorial = 1
For i =1 to n
Factorial = Factorial * i
Next i
End If
End Function

Private Sub Command1_Click()
Const Pi As Single = 3.1415927
Dim i As Integer, n As Integer
Dim Angle As Single, Rad As Single, Approx  As Single, Exact As Single
Dim Sum As Single, C As Single
Angle  = Val(Text1.Text)
Rad = 2 * Pi * Angle / 360   ‘เปลี่ยนจากองศาเป็นเรเดียน
n = Val(Text2.Text)
Sum = 0
C = 1
For i = 1 To n
Sum = Sum + C * Rad ^ (2 *  i – 1) / Factorial(2 * i – 1) 
C = -C  ‘กลับค่าสำหรับลำดับถัดไป
Next i
Approx = Sum
Exact = Sin(Rad)
Text3.Text = Str(Approx)
Text4.Text = Str(Exact)
End Sub



ถึงแม้บทความนี้จะมีเนื้อหาสั้น ๆ แต่ก็ถือว่าเป็นหัวใจของ Visual Basic ถ้าสามารถทำความเข้าใจได้มากก็จะทำให้สามารถเขียนโปรแกรมด้วย Visual Basic หรือภาษาใด ๆ ได้ดียิ่งขึ้น และในบทความต่อไปเราจะศึกษาการเขียนโปรแกรมควบคุมเมาส์และคีย์บอร์ดโดยการเรียกใช้ชุดคำสั่งของ Visual Basic