ภาษาเบสิก และกรณีศึกษา | ||
ภาษาโปรแกรม (Program Language) # คือ วิธีการมาตรฐานในการสื่อสารสำหรับแสดงคำสั่งไปยังคอมพิวเตอร์ ภาษาโปรแกรมกำหนดไวยากรณ์และการตีความหมายจากโปรแกรมคอมพิวเตอร์ที่เขียนขึ้น ภาษาโปรแกรมทำให้โปรแกรมเมอร์สามารถระบุอย่างชัดเจนถึงข้อมูลที่คอมพิวเตอร์จะทำงาน และวิธีการที่คอมพิวเตอร์จะประมวลผลข้อมูลเหล่านั้น
ภาษาเบสิค (Basic Language) คือ ภาษาคอมพิวเตอร์ที่พัฒนาโดยจอห์น เคมเมนี (John Kemeny) และ ธอมัส เคิรตส์ (Thomas Kurtz) แห่งวิทยาลัยดาร์ทเมิร์ท (Dartmouth College) ในปีค.ศ. 1963 วิชวลเบสิก (Visual Basic) คือ ภาษาคอมพิวเตอร์สำหรับสร้างโปรแกรมประยุกต์ (Application) ที่ใช้งานได้อย่างหลากหลายบนระบบปฏิบัติการวินโดว์ และสามารถเรียกใช้วัตถุที่ตัวแปลภาษาเตรียมไว้ให้บริการ |
ตอนที่ 1 : |
Download : chap001.zip |
unload me ? สร้างฟอร์ม และเพิ่มปุ่มปิดฟอร์มอีกปุ่มหนึ่ง ? สร้าง command button ใหม่โดยใส่คำสั่ง msgbox("x") ? สร้าง command button ใหม่โดยใส่คำสั่ง x = InputBox("abc", "def") |
Download : chap002.zip |
Text1 = Text1 + 1 ? สร้างปุ่มคูณสอง ? สร้างปุ่มบวกสอง ? สร้าง text box อีก 1 และทำให้การบวก ลบ นำ text box ใหม่มาร่วมใช้ |
Download : chap003.zip |
Shape1.Shape = 1 Shape1.Shape = 2 ? ให้เพิ่ม frame ให้และเลือกกำหนด backcolor หรือ bordercolor หรือ fillcolor ? ให้เพิ่มช่อง สำหรับกำหนดขนาด width และ height ของ shape |
Download : chap004.zip |
Label1.FontSize = 10 ? เพิ่ม label และเปลี่ยนขนาดได้ 2 label พร้อมกัน ? เพิ่มตัวเลือก และสั่ง msgbox |
Download : chap005.zip |
Unload Me Unload Form2 Form1.Show ? สร้างฟอร์มที่ 4 ขึ้น แต่มีปุ่มสั่งเปิดปิดฟอร์มอื่น ? สร้างฟอร์มที่ 5 ให้มีคำสั่ง msgbox ประจำปุ่ม |
Download : chap006.zip |
Frame1.Visible = False Frame1.Visible = True ? สร้าง frame ใหม่ และปุ่มใหม่เป็นปุ่มต่อไป ? สร้าง frame ใหม่ และให้มีปุ่มอยู่ใน frame นั้น |
Download : chap007.zip |
Randomize (Timer) For i = 1 To 20 List1.AddItem Int(Rnd * 100) Next List1.Clear List1.RemoveItem (Text2) Text1 = List1 Text2 = List1.ListIndex ? ให้ทำแบบที่ผมทำนี้ให้ได้ ? ให้สุ่มเลขมากกว่า 20 จำนวน และมีค่ามากกว่า 2 หลัก |
Download : chap008.zip |
List1.SetFocus List1.ListIndex = 5 Combo1.AddItem List1 Text1 = Combo1.ListCount ? สร้าง combo box มารับค่าอีกตัวหนึ่ง คู่กันกับของเดิม ? หาผลรวมของทุกค่าใน combo box แสดงพร้อมจำนวน |
Download : chap009.zip |
y = Split(List1, ",", -1, vbTextCompare) z = Int(y(0)) + Int(y(1)) Combo1.AddItem z Combo1.Text = z List1.RemoveItem List1.ListIndex Text2 = "Even" If z Mod 2 = 1 Then Text2 = "Odd" Text1 = Combo1.ListCount List1.SetFocus List1.ListIndex = z ? เดิมหาผลรวม 2 ค่าแล้วย้ายไป ให้เปลี่ยนเป็นผลคูณ ? เดิมมี 2 ค่า ในแต่ละบรรทัด ให้เพิ่มเป็น 3 |
Download : chap010.zip |
? ให้เพิ่มเขตข้อมูล ? ให้เปลี่ยนเป็นภาษาไทย |
Download : chap011.zip |
List1.ListIndex = -1 For i = 1 To List1.ListCount List1.ListIndex = List1.ListIndex + 1 If InStr(1, List1, Text1, vbTextCompare) > 0 Then List2.AddItem List1 End If Next ? เพิ่มเขตข้อมูล ? รวมเพิ่ม ลบ แก้ไข เข้ากับโปรแกรมนี้ |
Download : chap012.zip |
For i = 1 To List1.ListCount List1.ListIndex = List1.ListIndex + 1 y = Split(List1, ",", -1, vbTextCompare) If y(0) = Val(Text2) Then Text3 = y(1) Text4 = y(2) End If Next List1.ListIndex = -1 For i = 1 To List1.ListCount List1.ListIndex = List1.ListIndex + 1 y = Split(List1, ",", -1, vbTextCompare) If y(2) > Val(Text1) Then List2.AddItem List1 End If Next ? เพิ่มเขตข้อมูล ? ทำให้มีการค้นหาได้ทั้ง 3 แบบ ? เพิ่มการ เพิ่ม ลบ แก้ไข |
Download : chap013.zip |
form2.visible = true ' form2.show ' end ' unload form1 ? ทำแบบที่ผมทำ โดยเปลี่ยนภาพ ? ทำ game จับผิดภาพเหมือน ถ้าถูกจึงเปิด form ใหม่ |
Download : photoword.zip | photoword.exe |
? ทำแบบที่ผมทำ ปรับรูปภาพเป็นภาพอื่น ? นำไปทำเกมด้านภาษาก็ได้ ? นำไปประยุกต์ทำเกมจับผิดภาพ |
Download : ballrun.exe |
? ทำแบบที่ผมทำ ปรับขนาดรูป หรือเปลี่ยนเป็น image ? เพิ่ม object ในการวิ่ง ? ให้ประยุกต์ โดยเปลี่ยนภาพ เพิ่มฟอร์ม และ object ให้ดูดีขึ้น |
Download : dif.zip | dif.exe ตัวอย่างคำสั่งเกี่ยวกับเวลา ที่น่าสนใจ Text1 = Time - CDate(Form2.Text1) Text1 = Format(Text1, "long time") |
? ทำแบบที่ผมทำ เปลี่ยน image และปรับให้ดูดีมากขึ้น ? เพิ่ม level หรือเพิ่มฟอร์มให้มากขึ้น แทนที่จะมีเพียง 3 ? ให้ประยุกต์ โดยออกแบบเกมต่าง ๆ ไว้เล่นเอง |
Download : numtxt.exe |
? ทำแบบที่ผมทำ เปลี่ยนรูปแบบ และไม่ใช้คุณสมบัติ on change แต่ใช้ command_click แทน ? ลองนำไปใช้ร่วมกับ object ต่าง ๆ ให้ดูมีประโยชน์ขึ้น ? ให้ประยุกต์ โดยสร้างกรณีศึกษาประกอบการใช้ function นี้ |
Download : slide.exe |
? ทำแบบที่ผมทำ โดยเพิ่มจำนวน slide เปลี่ยนภาพ และเปลี่ยนข้อมูลดูนะครับ ? ลองตั้งเวลาให้ slide เลื่อนเองดู ? ลองเพิ่ม slide ใน 1 form พร้อมกับ เพิ่มฟอร์มไปด้วย ให้มีข้อมูลหลายรูปแบบ |
? ทำแบบที่ผมทำ มีปุ่ม + ปุ่มเดียว ? เพิ่มปุ่มลบ คูณ หาร ? เพิ่มปุ่มแปลงเลขฐาน |
? ทำแบบที่ผมทำ มีปุ่ม + ปุ่มเดียว ? เปลี่ยนเป็นนับเลขเหมือน Bank |
ตอนที่ 2 : |
Download : chap101.zip |
1. เปิด VB6.0 แล้วเลือก Standard EXE แล้ว Open 2. click Textbox จาก Toolbox 3. เลื่อน mouse ไปที่ form แล้ว click ค้างไว้ พร้อมลากไปทางขวาขนาดพอใส่ข้อมูลได้ 4. ทำตามข้อ 3 สร้าง text2 และ text3 ไว้เตรียมแสดงข้อมูล 5. click Data หรือ Data control จาก Toolbox แล้วทำคล้ายข้อ 3 6. สรุปว่าใน form1 จะมี Object อยู่ 4 Object นะครับ 7. กำหนดคุณสมบัติ หรือ Properties ให้กับ Data1 3 อย่างดังข้อมูลด้านล่าง 8. กำหนดคุณสมบัติ หรือ Properties ให้กับ Text1 2 อย่างดังข้อมูลด้านล่าง 9. กำหนดคุณสมบัติ หรือ Properties ให้กับ Text2 2 อย่างดังข้อมูลด้านล่าง 10. กำหนดคุณสมบัติ หรือ Properties ให้กับ Text3 2 อย่างดังข้อมูลด้านล่าง 11. แล้วก็ save Project หาห้องเก็บให้เป็นระเบียน .. เวลาเรียกมาอีกจะได้หาเจอ 12. ผลการจัดเก็บจะได้ 2 แล้วคือ .vbp และ .frm ถ้า save แล้วก็ลองปิด VB 13. ลองเปิด VB และเปิดแฟ้ม .vbp ขึ้นมาใหม่ดูครับ 14. ถ้ามีปัญหาการทำตาม ให้ไปดูบทที่ 107 เพราะมีไม้เท้าวิเศษ ช่วยสร้างให้หมดครับ
Data1 Properties Databasename = C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb RecordType = Table RecordSource = Categories Text1 Properties Datasource = Data1 Datafield = CategoryID Text2 Properties Datasource = Data1 Datafield = CategoryName Text3 Properties Datasource = Data1 Datafield = Description ? ให้เปลี่ยนเป็น table อื่น เช่น Customers หรือ Employees เป็นต้น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap102.zip |
ส่วนของ Data control กำหนดเหมือน 101 DBGrid1 Properties DataSource = Data1 ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap103.zip |
ส่วนของ Data control กำหนดเหมือน 101 คำสั่งควรทราบ Data1.Recordset.AddNew If Len(Trim((Text2)) > 0 Then ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap104.zip |
- Data1.Recordset.Bookmark = เก็บตำแหน่งที่ชี้ใน Data control - Data1.Recordset.Index = กำหนดให้เป็น Primary key ที่จะทำงานกับ seek - Data1.Recordset.Seek = ค้นหาและส่งผลให้ Nomatch ว่าจริงหรือเท็จ - Data1.Recordset.NoMatch = รับผลจากการ seek
Bookmark = Data1.Recordset.Bookmark Data1.Recordset.Index = "PrimaryKey" Data1.Recordset.Seek "=", Val(Text4) If Data1.Recordset.NoMatch Then Data1.Recordset.Bookmark = Bookmark Else Command2.Enabled = True Text1.Visible = True Text2.Visible = True Text3.Visible = True End If If MsgBox("Are you sure to delete?", vbYesNo) = vbYes Then Data1.Recordset.Delete Data1.Refresh Else MsgBox "ไม่มีการปรับปรุงค่า" End If ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap105.zip |
ให้ Properties of DBGrid,Datasource = data1 ให้ Properties of DBGrid,AllowUpdate = false Bookmark = Data1.Recordset.Bookmark Data1.Recordset.Index = "PrimaryKey" Data1.Recordset.Seek "=", Val(Text4) If Data1.Recordset.NoMatch Then Data1.Recordset.Bookmark = Bookmark Else Text1.Visible = True Text2.Visible = True Text3.Visible = True End If Private Sub DBGrid1_click() Text4 = DBGrid1.columns(0) Text4.Refresh End Sub ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap106.zip |
Private Sub Command1_Click() Bookmark = Data1.Recordset.Bookmark Data1.Recordset.Index = "PrimaryKey" Data1.Recordset.Seek "=", Val(InputBox("Get categoryid")) If Data1.Recordset.NoMatch Then MsgBox ("Not found") Data1.Recordset.Bookmark = Bookmark End If End Sub Private Sub Command2_Click() Bookmark = Data1.Recordset.Bookmark Data1.Recordset.Index = "CategoryName" Data1.Recordset.Seek "=", InputBox("Get categoryname") If Data1.Recordset.NoMatch Then MsgBox ("Not found") Data1.Recordset.Bookmark = Bookmark End If End Sub ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
Download : chap107.zip |
1. เลือก Add-Ins จาก menu bar แล้วเลือก Add-In manager, VB 6 Data Form Wizard แล้ว Click ที่ Loaded/Unloaded แล้วกดปุ่ม OK 2. เลือก Data form wizard ด้วยการ Click ที่ Add-Ins, Data Form Wizard..., Next, เลือก Access แล้วกดปุ่ม Next, "C:\Program Files\Microsoft Visual Studio\VB98\Nwind.mdb", Next, Single record และ ADO Data control, Next, ในช่อง Record source เลือก Categories, เลือก 3 fields แรกมาด้านขวา, next, finish จะได้ form ใหม่ขึ้นมาใน project ของเรา จากนั้นอยากให้ฝึกย้ายปุ่ม แล้วลองฝึกย้าย source code จากฟอร์มหนึ่งไปอีกฟอร์มหนึ่ง ซึ่งผมลองย้ายจากที่สร้างมาใหม่ไป form1 ก็ไม่ยากอะไร
ฟอร์มนี้ไม่ได้เขียน code เลย แค่เรียกตารางมาใช้ ไม่ให้ผิดพลาดก็ ok แล้ว Source code ที่ Wizard สร้างให้ ? ให้เปลี่ยนเป็น table อื่น ? ให้สร้างแฟ้ม .mdb ใช้เอง และเรียก table ของตนเอง |
|
- ข้อมูลใน products ของ nwind.mdb มี 10 fields แต่ลองใช้ 3 fields - สร้าง 5 control ดังภาพ คือ 3 textbox, command และ adodc - เลือก ADODC properties ด้วยการ Right click จาก adodc bar ใน form ? สร้าง command2 เป็นปุ่มเลือกมาข้างหน้า ด้วยคำสั่ง moveprevious ? สร้าง command3 และ 4 เป็นปุ่ม movefirst และ movelast ? เปลี่ยนตารางจาก products เป็นอื่น ๆ (ตารางไหนก็ได้) |
ตอนที่ 3 : |
Download : chap201.zip |
1. click Project, References.. จาก menu bar แล้วเพิ่ม Microsoft DAO 3.51 Object Library ด้วยการทำเครื่องหมายถูกใน check box 2. สร้าง Textbox ชื่อ Text1 3. สร้าง CommandButton ชื่อ Command1 4. Copy source code ด้านล่าง ไปใส่ในส่วนของ View code window 5. Run ได้เลยครับ Source code ที่ใช้งาน ? ปัจจุบันยังเข้าไปแก้ข้อมูลแต่ไม่มีผล ทำไงจึงห้ามแก้ไข ? ให้นับจำนวนระเบียนในตารางอื่น ๆ ดูบ้าง ? ตัวอย่างนี้มี field เดียวลองเพิ่มเป็น 2 หรือ 3 สิครับ |
1. click Project, References.. จาก menu bar แล้วเพิ่ม Microsoft DAO 3.51 Object Library ด้วยการทำเครื่องหมายถูกใน check box 2. สร้าง Textbox ชื่อ Text1และ Text2 3. สร้าง CommandButton ชื่อ Command1 และ Command2 4. Copy source code ด้านล่าง ไปใส่ในส่วนของ View code window 5. Run ได้เลยครับ Source code ที่ใช้งาน ? เปลี่ยนจากตาราง categories เป็นตารางอื่น ? เปลี่ยนการแสดงข้อมูลใน msgbox เป็นใน form ใหม่ ? เปลี่ยน หรือเพิ่ม หน้าที่จาก addnew เป็น edit หรือ delete |
Download : vbnwind.zip Program screen Database screen |
? เปลี่ยนจากตาราง categories เป็นตารางอื่น ? เพิ่มฟอร์มปรับปรุงข้อมูล |
ตอนที่ 4 : | ตัวอย่างการดูวิธีประกาศ API เพื่อเรียกใช้ใน VB ต้องเปิดแฟ้ม WIN32API.TXT สำหรับการเปิดครั้งแรก |
Download : chap301.zip |
ตัวอย่างข้างล่างนี้: จะเรียกฟังก์ชันให้ทำงาน เมื่อมีการกดปุ่ม command1 แล้วส่งค่าให้กับ text1 แสดงผลต่อไป
Private Declare Function getdiskfreespacea _ Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal _ iprootpathname As String, _ ipsectorspercluster As Long, _ ipbytespersector As Long, _ ipnumberoffreeclusters As Long, _ iptotalnumberofclusters As Long _ ) As Long Private Sub Command1_Click() result = getdiskfreespacea("c:\", sectors, bytes, freecluster, totcluster) Text1 = Format(sectors * bytes * freecluster, "##,###") & " Bytes" Text1 = Text1 & "(" & sectors & "*" & bytes & "*" & freecluster & ")" msgbox app.path End Sub ตัวอย่าง 2 : แยกประกาศในโมดูล และในฟอร์ม ' in module1 (if in form will be error) Public Type SYSTEMTIME ? ให้เปลี่ยนเป็น drive อื่น เพราะปัจจุบันมักมีหลาย Drive กันแล้ว ? ให้เรียก GetSystemInfo จาก kernel32 ? แสดง Current Directory ด้วย app.path ใน text box ? ลองเรียกใช้ API ตัวอื่นดูสิครับ |
Download : chap302.zip และ tping.exe |
คำสั่งควรทราบ List2.Clear List3.Clear If List1.ListCount > 255 Then j = List1.ListCount - 255 Else j = 1 For i = List1.ListCount To j Step -1 List1.ListIndex = i - 1 If (Mid(List1, 1, 1) = "[") Then List2.AddItem List1 Else List3.AddItem List1 End if Next . . If Command1.Caption = "START &PING" Then checkip Timer1.Interval = Text6 Command1.Caption = "STOP &PING" Else Command1.Caption = "START &PING" Timer1.Interval = 0 End Ifแบบฝึกหัด ? ถ้านำไปใช้จะพบปัญหา ให้แก้ปัญหาเรื่องการแสดงผล ? ให้ปรับโปรแกรมกำหนด IP ยืดหยุ่นมากขึ้น ถ้าใช้ในองค์การใหญ่ ? ท่านเข้าใจตัวอย่าง code ข้างล่างนี้ว่าอย่างไร Dim buff As String Open "c:\test.txt" For Input As #1 filestr = "" Do Until EOF(1) Line Input #1, TempStr filestr = filestr & TempStr & Chr$(13) & Chr$(10) Loop Close #1 Text1.Text = filestr ' Open App.Path & "\output.txt" For Output As #2 ' Print #2, s_Student, s_Grade |
ตัวอย่าง open.php <? $f = fopen("log.txt","a"); fputs($f, $_GET["q"].",".$_GET["n"]."\n"); fclose($f); ?> ตัวอย่าง list.php <? $ar = file("log.txt"); foreach ($ar as $v) echo $v."<br>"; ?> ? ทำแบบที่ผมทำ อย่าแปลกใจ เพราะโปรแกรมนี้แทบไม่เห็นผล ? สร้างปุ่ม close form มา 1 ปุ่ม ? ทำ ball วิ่งเต็มจอ นำมาจากบทที่ 16 ได้เลย ? แก้ไขให้ open.php และ list.php ทำงานร่วมกับ .MDB หรือ MySQL |