Visual Basic เพื่อติดต่อสื่อสารผ่านพอร์ต RS-232

Posted by Unknown Wednesday, April 24, 2013 0 comments
หลายคนที่ใช้ไมโครคอนโทรลเลอร์คงหนีไม่พ้นการสื่อสารกับคอมพิวเตอร์ โดยผ่านพอร์ต RS-232
หรือซีเรียลพอร์ต แต่บางครั้งก็ไม่รู้ว่าจะเริ่มต้นอย่างไรดี วันนี้ผมจะแนะนำการเขียนโปรแกรม
Visual Basic สื่อสารผ่าน RS-232 เป็นตัวอย่าง สำหรับผู้ที่กำลังมองหาโปรแกรมบนคอมพิวเตอร์
ตัวอย่างต่อไปนี้ใช้บอร์ดทดลองไมโครคอนโทรลเลอร์ PIC18F458 อ่าน A/D ไม่ใช่แค่ Channel เดียวนะครับ
เอาไปเลยมันมี 8 Channel ใช้มันทั้งหมดนี่แหละใช้ทรัพยากรให้คุ้มค่า
โปรเจคนี้ มีโปรแกรมอยู่ 2 ภาษา นะครับ คือ VB และ C (CCSC) สำหรับ PIC18F458


หลักการทำงานของโปรแกรมในส่วนของ Visual Basic

เนื่องจากในตัวอย่างนี้เป็นการรับข้อมูลเพียงอย่างเดียวจึงค่อนข้างยากในการรับข้อมูลหลายๆชุดแบบต่อเนื่อง
ต่างจากการเขียนให้ รับ-ส่ง คือส่ง Command ออกไป แล้วรอรับกลับวิธีนี้กำหนดได้ชัดเจนว่าต้องการข้อมูลอะไร
ตัวอย่างนี้กำหนดให้โปรแกรมทำงานแบบ Event เมื่อมีข้อมูลเข้ามาให้เกิดการกระตุ้นให้ทำงาน
และ เก็บค่าที่เข้ามาไว้ใน ตัวแปร Array 0-8 ( data0-data8 ) แล้วตรวจสอบว่า ถ้าค่าใหนเป็นส่วนหัวของชุดข้อมูล( ตัวอย่างนี้เป็นค่าคงที่ -9999 )
ให้ไส่ใว้ในตัวแปรอาเรย์”0” หรือ Data(0) และตัวถัดไปให้ไส่ลงไปใน ตัวแปรอาเรย์ ตัวถัดไป ขั้นตอนนี้ เป็นกระบวนการ กรอง
หรือคัดแยกข้อมูลที่เข้ามาแบบต่อเนื่อง ให้เป็นระเบียบก่อนการนำไปแสดงค่าต่อไป จากนั้นวนรับข้อมูลจนครบ 9 ชุด (data(8))
แล้วนำค่าที่ได้มาแสดงผลบน TextBox ที่กำหนด
หลักการทำงานของโปรแกรมในส่วนของ C (CCS C)
ส่งค่าคงที่ -9999 ซึ่งกำหนดให้เป็นส่วนหัวของชุดข้อมูล ออกไปอ่าน A/D จาก Channel 0-7 แล้วส่งค่าออก วนรอบการทำงาน
มีข้อควรระวังอยู่ว่าเนื่องจากเป็นการอ่าแบบ 8 Channel โปรแกรมนี้ควรต่อ VR10k ให้ครบทุก Channel หากช่องได้ไม่ได้ต่อ
ก็จะแสดงค่าออกมาแต่ค่าจะไม่เป็น “0”
มาเริ่มกันเลยครับ
เริ่มต้นโดยเปิดโปรเจคขึ้นมานะครับ ผมเลือกเป็น VB Enterprise Edition Controls ครับ
เครื่องมือเยอะดีครับ

เมื่อเลือกเสร็จแล้วหน้าตาจะเป็นแบบนี้ ให้ดับเบิ้ลคลิ๊กที่ Project (วงกลมสีแดง) แล้วคลิ๊กที่ Form1

หน้าตาก็จะออกมาดังนี้
เสร็จแล้วให้เลือก Mscomm จากทูลบาร์ เข้ามาวางในฟอร์ม โดย Mscomm เป็น คอนโทรล ที่เป็นตัว
จัดการการสื่อสารผ่าน พอร์ต RS-232 ซึ่งเป็นส่วนสำคัญทีขาดไม่ได้ในโปรเจคนี้

จากนั้นให้ลาก TextBox เข้ามาในฟอร์ม แล้ว เปลี่ยนค่า ของ TextBox ในหน้าต่าง Properties ดังนี้
Borderstyle = Fixed Single
Font = size 18
Forecolor = เลือกสีอักษรตามใจชอบ

จากนั้นให้คลิ๊กขวาที่ TextBox แล้วเลือก Copy แล้วคลิ๊กขวาที่ฟอร์ม แล้วเลือก Paste
จากนั้นจะมีป๊อบอัพขึ้นมาถาม ให้เลือก No ทำแบบนี้ซ้ำ จนได้ TextBox 8 รูป ดังภาพ
หลังจากนั้นให้คลิ๊กที่ TextBox อันแรก แล้วไปที่หน้าต่าง Properties ในช่อง Name ให้เปลี่ยนชื่อเป็น
Aray1 และ Aray2 ไปจนจนถึง Aray8
( หากต้องการเปลี่ยนอักษรที่โชว์บนTextBoxให้เปลี่ยนตรง Text )

เท่านี้ก็สำเร็จไปอีกขั้นนึงแล้วและต่อไปเป็นขั้นตอนที่ขาดไม่ได้นั่นก็คือ
การเขียนโค๊ตคำสั่ง เรามาเริ่มกันเลย ให้ดับเบิ้ลคลิ๊กที่ฟอร์มนะครับแล้วเขียนค่าดังนี้
หรือ Download ตัวอย่างได้จาก ตรงนี้ นะครับ


Option Explicit
Dim data(0 To 8) As String
Dim i As Byte

Private Sub Form_Load()
MSComm1.CommPort = 1
MSComm1.InBufferSize = 1024
MSComm1.OutBufferSize = 512
MSComm1.RThreshold = 1
MSComm1.Settings = "9600,n,8,1"
MSComm1.PortOpen = True
End Sub
Private Sub MSComm1_OnComm()
On Error Resume Next
i = i + 1
If MSComm1.CommEvent = comEvReceive Then
data(i) = MSComm1.Input
End If
If data(i) = -9999 Then
i = 0
End If
If i = 8 Then
Aray1.Text = data(1)
Aray2.Text = data(2)
Aray3.Text = data(3)
Aray4.Text = data(4)
Aray5.Text = data(5)
Aray6.Text = data(6)
Aray7.Text = data(7)
Aray8.Text = data(8)
i = -1
End If
ProgressBar1.Value = i
End Sub
สำหรับตัวอย่างการส่งข้อมูล ของ ไมโครคอนโทรลเลอร์ PIC18F458 อยู่ด้านล่างครับ
/******************************************************************************
* File : Analog To Digital.c
*****************************************************************************/
#include <18f458.h> // Standard Header file for the PIC18F458 device
#define TxD PIN_C6 // Define Transmitted Data
#define RxD PIN_C7 // Define Received Data
#define CLOCK_SP 10000000 // Clock Speed(Hz)
// Device Specification
#fuses HS // Oscillator mode HS
#fuses NOLVP, NOWDT // No Low Voltage Program, No Watchdog timer
#fuses NOPROTECT // Code no protection
#device ADC=10 // ADC 10 Bit (1111111111=1,023)
#use delay (clock=CLOCK_SP) // Use built-in function: delay_ms() & delay_us()
#use rs232(baud=9600, xmit=TxD,rcv=RxD) // Use serial I/O port (RS232)
#use fast_io(A) // programming of the direction register.
/***********************************************************************
* Constants
***********************************************************************/
#define Vbe 0.0048875855327468230694037145650049 // Vref/1023 (5/1023)
/***********************************************************************
* FUNCTION: main
***********************************************************************/
void main(void) {
int16 value;
float volt;
int8 Point;
setup_port_a(ALL_ANALOG); // A0 A1 A2 A3 A5 E0 E1 E2 Ref=Vdd
setup_adc(ADC_CLOCK_INTERNAL); // Clock RC

do {
Point=Point+1;
if(Point>7){
Point=0;
printf("nr-9999");
Delay_ms(1000);
}

set_adc_channel(Point); // Read Analog input RA0(channel=0-7)
delay_us(10);
value = Read_ADC();
delay_us(10);
volt = Vbe * (float) value;
printf("nr%f",volt);
delay_ms(1000);
} while (TRUE);
}
สำหรับบอร์อดที่ใช้ในตัวอย่างนี้เป็นบอร์ด CP-PIC V3 ของ ETT

โดยต่อ ต่อ VR10 k ที่พิน A0, A1, A2, A3, A5 ,E0, E1, E2
โดยต่อกับทุก Channel ในลักษณะแบบนี้นะครับ

เมื่อต่อสาย RS-232 ของ บอร์ดไมโครคอนโทรลเลอร์ ไปที่RS-232 ของคอมพิวเตอร์แล้ว เมื่อรันโปรแกรมแล้ว หน้าตาก็จะออกมาดังนี้

ตัวอย่างการประยุกค์ใช้งาน

หวังเป็นอย่างยิ่งว่าบทความนี้จะเป็นประโยชน์สำหรับผู้ที่สนใจ ที่จะเอาไปศึกษาพัฒนาต่อไปนะครับ
หากมีเวลาว่าจากการทำงาน คราวหน้าจะเขียนตัวอย่างการสื่อสาร แบบ RS-485 ด้วย Visual Basic กับไมโครคอนโทรลเลอร์ครับ
โดย : Calman

วิธีในการสร้าง Path ให้กับ Application (ให้มันถูกต้อง)

Posted by Unknown Friday, September 7, 2012 0 comments
           เราจะใช้้คุณสมบัติ Path ของวัตถุ Application เข้ามาใช้งาน หากแต่ว่าทำไมเมื่อมีการนำชื่อไฟล์มาต่อท้ายเส้นทางที่ได้ จากคุณสมบัติ Path ของออบเจค App บางครั้งก็ปรากฏข้อผิดพลาด แต่บางครั้งก็ไม่ปรากฏข้อผิดพลาด ทั้งนี้ก็เพราะเนื่องจากว่า ถ้าหากเส้นทางที่ได้นั้น ไม่ใช่ไดเรคทอรี่ราก (Root) ชื่อเส้นทางที่ได้จะไม่มีเครื่องหมาย BackSlash "\" รวมอยู่ด้วย แต่ถ้าหากเป็นไดเรคทอรี่ราก ชื่อเส้นทางที่ได้จะมีเครื่องหมาย BackSlash รวมอยู่ด้วย เช่น "C:\" เป็นต้น ดังนั้นเพื่อความถูกต้อง และ ปลอดภัย เราจะอาศัยโค้ด ดังตัวอย่างด้านล่างนี้
Function FilePath(strFileName As String) As String
  If Right$(App.Path, 1) = "\" Then
    FilePath = App.Path & strFileName
  Else
    FilePath = App.Path & "\" & strFileName
  End If
End Function
หรือในกรณีที่นำไปใช้งานจริงกับการเชื่อมต่อไฟล์ฐานข้อมูล (แบบหากินจริงๆ)
Sub OpenDataBase()

Dim Conn As New ADODB.Connection

Dim RS As New ADODB.RecordSet

' หากต้องนำไปใช้ร่วมกับโปรแกรมย่อยอื่่นๆ ควรประกาศ Conn และ RS ในลักษณะของ Global น่ะขอรับ

Dim DB_File As String, SQLStmt As String

  DB_File = App.Path
  If Right$(DB_File, 1) <> "\" Then DB_File = DB_File & "\"
  DB_File = DB_File & "DATABASE.MDB"
  ' Open a connection.
  Set Conn = New ADODB.Connection
  Conn.ConnectionString = _
    "Provider = Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source = " & DB_File & ";" & _
    "Persist Security Info = False"
  Conn.Open

  ' ตัวอย่างนำไปใช้งานกับการสร้าง RecordSet

  SQLStmt = "SELECT * FROM tblSample"
  Set RS = Conn.Execute(SQLStmt, , adCmdText)
End Sub 

การค้นหาข้อความที่มีอยู่ใน ListBox อย่างรวดเร็ว (API)

Posted by Unknown 0 comments

ตอนนี้ก็จะขอกล่าวถึง Control พื้นฐานที่ยอดนิยมอีกตัวหนึ่งใน Visual Basic นั่นก็คือ List Box โดยจะแสดงตัวอย่างในการที่ผู้ใช้งานพิมพ์ข้อความใดๆ ลงไปใน TextBox เพื่อค้นหาคำที่ตรงกันกับที่อยู่ใน ListBox หากข้อความตรงกัน ที่ Control ListBox ก็จะแสดงแถบแสงออกมาให้เห็น แต่ทางตรงกันข้าม หากไม่มีข้อความใดตรงกัน ก็จะไม่แสดงผลออกมา

แน่นอนครับว่า ในงานลักษณะแบบนี้ ก็คงหนีไม่พ้นต้องนำเอา Windows API (Application Programming Interface) ที่ถูกบรรจุเอาไว้ใน Visual Basic มาช่วยด้วยอยู่แล้ว โดยอาศัยเทคนิคของฟังค์ชั่น SendMessage (ปกติแล้ว Control หรือ Object แต่ละตัวนั้นมีการพูดคุยหรือติดต่อสื่อสารกันได้ ก็เพราะ SendMessage นี่แหละครับ) ด้วย LB_FINDSTRING (ListBox Find String - &H18F) สำหรับ ListBox เพื่อระบุตำแหน่งในส่วนที่ตรงกันกับตัวอักษรที่เราคีย์เข้าไป ดังนั้น Message ที่เราส่งไปยัง List Box มันก็คือ ค่าเลขจำนวนเต็มคงที่แบบ Global ในที่นี้ก็คือ 18F ฐานสิบหกนั่นเอง โดยที่ฟังค์ชั่น:

SendMessage(hWnd, LB_FINDSTRING, wParam, lParam)

เื่มื่อ

hWnd - กำหนด Handle Windows ให้ไปอยู่ที่ List box
wParam - ระบุตำแหน่งในการค้นหา ถ้ากำหนดให้มีค่าเป็น -1 แล้วก็จะเป็นการค้นหาำทั้งหมดที่มีอยู่ใน Control

lParam - ข้อความที่ต้องการค้นหา


เอา ล่ะครับ เรามาเริ่มต้นทำงานกันเลยดีกว่า อันดับแรกก็คือ สร้างฟอร์ม Standard EXE ขึ้นมาใหม่ 1 ฟอร์ม (ชื่อ Form1) จากนั้นให้เลือก Control ใน ToolBox มา 2 ตัว ตัวแรกก็คือ
ListBox (ชื่อ List1) และ อีกตัวก็คือ TextBox (ชื่อ Text1) แล้วนำมาวางไว้บน Form1


ต่อไปให้ประกาศโค้ดดังข้างล่างนี้
ใต้ Option Explicit หรือ ส่วนของการประกาศทั่วไป (General
Declarations) ของ Form1:








Option Explicit
Const LB_FINDSTRING = &H18F

Private Declare Function SendMessage Lib "User32" _
Alias "SendMessageA" _
(ByVal hWnd As Long, _
ByVal wMsg As Integer, _
ByVal wParam As Integer, _
lParam As Any) As Long

ส่วนของโค้ดที่จะอยู่ในฟอร์ม - Form1

Private Sub Form_Load()
List1.Clear
' เพิ่มรายการ (Item) เข้าไปไว้ใน ListBox

List1.AddItem "Apples"
List1.AddItem "Banana"
List1.AddItem "Bread"
List1.AddItem "Break"
Text1.Text = ""
End Sub

' เกิดเหตุการณ์เปลี่ยนแปลงใน TextBox

Private Sub Text1_Change()
List1.ListIndex = SendMessage(List1.hWnd, LB_FINDSTRING, -1, ByVal Text1.Text)
End Sub



ก็ จบกระบวนการแล้ว เริ่มกด F5 เพื่อรันโปรแกรมได้เลยทันที จากนั้นให้คีย์ข้อความลงไปใน TextBox จะเห็นได้ว่าหากว่าเราป้อนข้อความลงไปใน TextBox แล้วไปตรงกับข้อความใดๆ ที่แสดงอยู่ใน ListBox ก็จะเกิดแถบแสง (Focus) แสดงให้เห็นบน ListBox

เล่น Application Programming Interface (API) - SendMessage

Posted by Unknown 0 comments
การเรียกใช้งานโปรแกรม API Text Viewer
Windows API แท้จริงแล้วก็คือ แก่นของ Windows หรือ Windows API ก็เปรียบเหมือนกับ MS-DOS.SYS สำหรับระบบปฏิบัติการ (Operating System - OS) ของ MS-DOS นั่นเอง โดยที่มันจะเก็บอยู่ในรูปแบบของ Dynamics Link Libraries อยู่ในไฟล์ที่มีนามสกุล DLL ในขณะที่ Windows กำลังรันอยู่ ไฟล์เหล่านี้จะถูกโหลดขึ้นมาด้วย และคงอยู่ในหน่วยความจำอยู่อย่างนั้น แต่ละโปรแกรมย่อยใน API จะมีตัวตน (Instance) เพียงตัวเดียว ไม่ว่าจะมีกี่โปรแกรมเรียกใช้มันก็ตามที การทำงานในลักษณะนี้เรียกว่า Dynamic Linking ซึ่งแตกต่างจากการเรียกโปรแกรมย่อย ในสภาพแวดล้อมที่ไม่ใช่ Windows ข้อ ดีของการทำ Dynamic Linking ก็คือ ประหยัดทรัพยากรระบบ ซึ่งในที่นี้ก็คือ หน่วยความจำ และ ฮาร์ดดิสต์ เนื่องจากแต่ละโปรแกรม ใช้โค้ดจากโปรแกรมย่อยร่วมกัน ตามที่ได้กล่าวมาแล้ว ข้อดีอีกข้อหนึ่ง คือ มีมาตรฐานการติดต่อผู้ใช้เหมือนกัน เราจะสังเกตได้ว่า เมนูของแต่ละโปรแกรมของ Windows มีลักษณะเหมือนกัน ไดอะล็อกซ์สำหรับจัดเก็บไฟล์ หรือ เปิดไฟล์ก็มีรูปร่างเหมือนกัน ทั้งนี้ก็เพราะการเรียกใช้โปรแกรมย่อย API ชุดเดียวกันนั่นเอง
โปรแกรมที่เราพัฒนาขึ้นจาก Visual Basic ก็เรียกใช้ API เช่นเดียวกัน โดย Visual Basic ช่วยอำนวยความสะดวก ในการเรียกโปรแกรมย่อยของ API แทนด้วยภาษาที่เรียบง่ายของ Visual Basic แต่ทว่าขอบเขตของภาษา Visual Basic ไม่ได้ครอบคลุมไปถึงทุกๆความสามารถของ Windows ในบางครั้งเราอาจต้องเข้าถึงจุดที่อยู่เหนือขอบเขตของ Visual Basic โดยการเรียกใช้ API โดยตรง

การประกาศโปรแกรมย่อย API
สามารถ เขียนไว้ที่ส่วน เช่น Declaration ของโมดูล (Module) ใดโมดูลหนึ่งก็ได้ แต่โดยทั่วไปจะไว้รวมกันที่ใดที่หนึ่งในโมดูล .BAS เราอาจสร้างโมดูลขึ้นมาโมดูลหนึ่ง สำหรับจัดเก็บการประกาศฟังค์ชั่น และ ซับรูทีนของ API โดยเฉพาะก็ได้ ในการทำงานของ Windows นั้น Control หรือ ที่เรียกกันว่า Object แต่ละตัวนั้น มีการสื่อสารกันด้วยเมสเสจ (Message) เมื่อเราใช้ Method Clear กับลิสต์บ็อกซ์ จะเกิด Message "ลบรายการของตัวเองทั้งหมด" ไปให้กับ List Box ตัวนั้น เป็นต้น Microsoft Visual Basic ไม่สามารถส่ง Message เองได้ แต่สามารถใช้ฟังค์ชั่น API เพื่อส่ง Message ให้ได้โดยใช้ฟังค์ชั่น SendMessage ฟังค์ส่งข้อความนี้ จะช่วยเพิ่มเติมขีดความสามารถให้กับ Visual Basic ได้ในหลายๆด้าน

การประกาศฟังค์ชั่นของ SendMessage มีดังนี้คือ

Declare Function SendMessage Lib "User32" Alias "SendMessageA" & _
(ByVal hWnd As Long, & ByVal wMsg As Long, & _
ByVal wParam As Long, lParam As Long)
As Long


เมื่อ :

hWnd
คือ Handle ของคอนโทรลปลายทางที่เราต้องการส่ง Message ไปให้
wMsg คือ ตัวเมสเสจที่การส่ง
wParam และ lParam คือ พารามิเตอร์เสริม ซึ่งมีหน้าที่ และ ความหมายแตกต่างกันไปใน Message แต่ละชนิด

เทคนิคพื้นฐานในการเขียนโปรแกรม Visual Basic

Posted by Unknown 0 comments
แม้ว่า Visual Basic จะเป็นภาษาที่ใช้งานได้ง่ายก็ตาม และ ตัวโปรแกรม Visual Basic เองยังมีขีดความสามารถ ในการทำงานอันเพียบพร้อม ซึ่งช่วยให้เราสามารถเขียนโค้ดได้ง่ายขึ้น และ มีการตรวจสอบโค้ดได้ ในขณะเขียนโดยอัตโนมัติ แต่เราก็ควรจะทำตามกฏเกณฑ์บางอย่าง ซึ่งผมจะแนะนำให้ดังต่อไปนี้ เพื่อให้โปรแกรมเขียนออกมาทำงานได้อย่างถูกต้อง แม่นยำ และ บำรุงรักษาได้ง่าย
เทคนิคที่ 1 ใช้ Option Explicit อยู่เสมอ การใช้ Option Explicit อยู่เสมอ จะช่วยป้องกันการพิมพ์ชื่อตัวแปร หรือ ค่าคงที่ผิดพลาด อันจะช่วยในการกำจัด Bug บางตัวที่ซ่อนอยู่ในโปรแกรม และ อาจรอวันประทุ เมื่อโปรแกรมมีขนาดใหญ่ขึ้น เช่น ถ้าเราไม่ใช้ Option Explicit เราจะไม่ทราบว่า ตัวแปรใดมีการประกาศเอาไว้ หรือ มีข้อมูลเป็นแบบใด ซึ่งอาจก่อให้เกิดการแปลงข้อมูลที่ผิดพลาดในอนาคต
เทคนิคที่ 3 ใช้ฟังค์ชั่น Len เพื่อตรวจสอบว่าข้อความว่างเปล่าหรือไม่
ฟังค์ชั่น Len ทำงานได้เร็วกว่ามาก โดยเฉพาะอย่างยิ่งเมื่อทำงานในลูป
ดังตัวอย่างต่อไปนี้
Dim sTemp As String

แทนที่จะใช้

If sTemp = "" Then DoSomeThing

' Check if sTemp is empty

If sTemp <> "" Then DoSomeThing

' Check if sTemp has a value



เราควรใช้

If Len(sTemp) = 0 Then Do SomeThing

' Check if sTemp is empty

If Len(sTemp) > 0 Then DoSomeThing

' Check if sTemp has a value.

เทคนิคที่ 5 กำหนดชนิดของตัวแปรให้ชัดเจน


การกำหนดชนิดของตัวแปรให้ชัดเจน เช่น เป็นตัวแปรชนิด
Long หรือ Integer จะช่วยให้โปรแกรมทำงานเร็วขึ้น
(ก็เพราะตัวแปลภาษา - Complier ทราบถึงชนิดของตัวแปรเรียบร้อยแล้ว
ไม่จำเป็นต้องมาเสียเวลาหาอีก) และ ง่ายต่อการ Debug
เพราะเราสามารถคาดเดา ได้ว่าตัวแปรนั้น สามารถรับค่าช่วงใดได้บ้าง

Dim sMsg As String

Dim iCounter As Integer

Dim vTemp As Variant



ซึ่งเราอาจประกาศตัวแปรหลายตัวเอาไว้บนบรรทัดเดียวกัน
ดังนี้

Dim sMsg As String, iCounter As Integer, vTemp As
Variant



โดยมีข้อควรระวัง คือ ถ้าเราไม่ได้ระบุชนิดข้อมูล จะเป็นการประกาศให้เป็นชนิด
Variant ดังตัวอย่างต่อไปนี้

Dim iCounter ดังนั้นตัวแปร iCounter จะกลายเป็นชนิด
Variant โดยทันที

เทคนิคที่ 7 จำลองคีย์แท็บ เมื่อกด Enter


ปกติเมื่อเราใส่ TextBox หลายอันเข้าไปในฟอร์ม เพื่อรับข้อมูล
คงไม่เป็นการสะดวกแน่ ถ้าผู้ใช้ต้องกดคีย์แท็บ เพื่อเลื่อนไปยังฟิลด์ถัดไปทุกครั้งที่คีย์ข้อมูลเสร็จ
โค้ดต่อไปนี้จะเลื่อน Cursor ไปยังฟิลด์ถัดไป เมื่อผู้ใช้กดคีย์
Enter ซึ่งจะช่วยให้ใช้โปรแกรมได้ง่ายขึ้น



Private Sub Form_KeyPress(KeyAscii As Integer)

If KeyAscii = vbKeyReturn Then

SendKeys "{TAB}"

KeyAscii = 0

End If

End Sub


  เทคนิคที่ 2 ใช้ NOT แทน <> เมื่อต้องการตรวจสอบความไม่เท่ากัน
การใช้ฟังค์ชั่น NOT จะทำงานได้เร็วกว่า <> เป็นอย่างมาก
โดยเฉพาะอย่างยิ่ง เมื่อทำงานในลูป ดังตัวอย่างต่อไปนี้

Dim i As Integer

แทนที่จะใช้

If i <> 5000 Then DoSomeThing

เราควรใช้

If Not i = 5000 Then DoSomeThing



เทคนิคที่ 4 เมื่อประกาศออปเจกต์ อย่าใช้ Dim ... As New ...


แทนที่จะประกาศออปเจกต์เป็น Instance ตัวใหม่ เราควรประกาศตัวแปรเป็นชนิดออปเจกต์นั้น
แล้วค่อยสร้าง Instance ขึ้นมาใหม่ ทั้งนี้เพื่อให้ทำงานได้เร็วขึ้น
และ รับประกันว่าจะมีการล้างหน่วยความจำที่ใช้โดยออปเจกต์
เมื่อเราไม่ต้องการใช้มันอีกต่อไป ด้วยการกำหนดค่า Nothing
ให้ ดังตัวอย่างต่อไปนี้

แทนที่จะใช้

Dim MyConnect As New Connection

เราควรใช้

Dim MyConnect As Connection

Set MyConnect = New Connection

จากนั้นเมื่อเราใช้เสร็จแล้ว เราควรล้างหน่วยความจำ
ด้วยการกำหนดค่า Nothing ให้กับตัวแปรดังนี้

Set MyConnect = Nothing

เทคนิคที่ 6 ระมัดระวังในการใช้ฟังค์ชั่น String และ Variant ที่อาจให้ผลลัพธ์ต่างกัน


ใน Visual Basic เราจะมีฟังค์ชั่นที่ลงท้ายด้วยเครื่องหมาย Dollar Sign
"$" อยู่กลุ่มหนึ่ง คู่กับฟังค์ชั่นชื่อเดียวกันที่ไม่ได้ลงท้ายด้วย
$ เช่น

MID กับ MID$

Left กับ Left$

Date กับ Date$

ซึ่งฟังค์ชั่น Date นี้เป็นตัวอย่างที่ดี โดยฟังค์ชั่น
Date จะส่งค่าคืนกลับเป็นชนิด Variant ในรูปแบบของ mm/dd/yy
ในขณะที่ฟังค์ชั่น Date$ ส่งค่ากลับคืนเป็นชนิด String
ในรูปแบบ mm/dd/yyyy ซึ่งถ้าใช้ไม่ระมัดระวัง ความแตกต่างนี้
จะก่อให้เกิด Bug ที่ต้องใช้เวลาพอสมควรในการค้นหา



เทคนิคที่ 8 ระวังความแตกต่างของค่าคงที่ vbNullXXX VB มีค่าคงที่ ที่ใช้ระบุถึงค่า
Null หลายตัวดังนี้


vbNull
เป็นข้อมูลชนิด Long มีค่าเท่ากับ 1

vbNullChar
เป็นข้อมูลชนิด String มีค่าเท่ากับ Chr$(0) ซึ่งตรงกับข้อความว่าง
ในภาษา C และค่าที่ส่งกลับคืนมาจากฟังค์ชั่น DLL ส่วนใหญ่
อย่างไรก็ตาม vbNullChar จะไม่ใช่ข้อความว่างใน VB

vbNullString
เป็นข้อมูลชนิด String ใีค่าเท่ากับข้อความว่างใน VB



ซึ่งแต่ละตัวใช้ในสถานการณ์ต่างกันดังนี้



vbNull
ใช้เพื่อตรวจสอบผลลัพธ์ของฟังค์ชั่น VarType() ซึ่งหมายความว่า
ไม่มีข้อมูลที่ถูกต้อง

vbNullChar
ใช้แทน Chr$(0) ซึ่งปกติใช้เพื่อเรียกใช้ Procedure
ภายนอก

vbNullString
ใช้เพื่อเคลียร์ String



โดย vbNullChar มีค่าไม่เท่ากับ vbNullString ดังนั้น
vbNullChar = vbNullString จะได้ค่าเป็น False เสมอ

เริ่มต้นใช้งาน Visual Basic 2008

Posted by Unknown Friday, August 31, 2012 0 comments

เริ่มต้นใช้งาน Visual Basic 2008




หลักการเขียนโปรแกรมด้วย Visual Basic 2008
1.เป็นการเขียนโปรแกรมแบบ Event Driven Programming
2.การเขียนคำสั่งกำหนดให้โปรแกรมทำงานในสิ่งที่เราต้องการตามเหตุการณ์ (Event) ที่เกิดขึ้น
3.การมองแต่ละส่วนของโปรแกรมเป็นออบเจ็กต์ (Object)
4.ออ บเจ็กต์แต่ละตัวมีคุณสมบัติหรือพร็อพเพอร์ตี้ (Property) เป็นของตัวเอง ซึ่งแต่ละคุณสมบัติสามารถกำหนดค่าให้ได้ เช่น สีโปรแกรม สีของเมนู
5.ออบเจ็กต์แต่ละตัวมีความสามารถหรือเมธอด(Method)เป็นของตัวเอง เช่น โปรแกรม Calculator สามารถ บวก ลบ คูณ หาร ได้
6.ออบเจ็กต์สามารถเกิดเหตุการณ์ต่างๆ หรือ Event เกิดขึ้นได้ เช่น การคลิก ป้อนข้อมูล หรือเลือกข้อมูล
7.ใน Visual Basic 2008 มีออบเจ็กต์ให้ใช้งานอยู่ 2 ประเภท คือ
คอนโทรล(Control)เป็นออบเจ็กต์ที่สามารถมองเห็นได้ เช่น ปุ่มกด(Button) กรอกข้อความ(Textbox)
คอมโพเนนต์(Component)เป็นออบเจ็กต์ที่เรามองไม่เห็นเวลาที่แอพพลิเคชั่นทำงาน (ทำงานอยู่เบื้องหลัง) เช่น ตัวจัดการด้านเวลา(Timer)

การสร้างแอพพลิเคชั่นด้วยฟอร์ม (Visual Basic 2008)

Posted by Unknown 0 comments


1.ออกแบบให้มีฟอร์มและวางคอนโทรลต่างๆ ไว้ดังนี้


2.ใน Form Designer ดับเบิลคลิกที่ฟอร์มเพื่อเขียนโค้ดกำหนดการทำงานที่ Event Load โดยใช้เขียนข้อความต้อนรับเมื่อเริ่มใช้งาน



3.ดับ เบิลคลิกที่ปุ่ม เปลี่ยนข้อความ เพื่อเขียนโค้ดที่ Event Click โดยเขียนให้เปลี่ยนข้อความที่แถบด้านบนของฟอร์ม ตามข้อความที่ปรากฏในช่องรับข้อความ



4.ดับเบิลคลิกที่ RadioBotton แต่ละตัวแล้วเขียนโค้ดให้มีการเปลี่ยนสีพื้นของฟอร์ม


5.ดับ เบิลคลิกปุ่ม จบการทำงาน แล้วเขียนโค้ดที่เรียกใช้เมธอด Close เพื่อจบการทำงานของฟอร์มนี้ซึ่งก็คือ จบการทำงานของแอพพลิเคชั่นนั่นเอง(เพราะแอพพลิเคชั่นนีมีแค่ฟอร์มเดียว)



6.ทดสอบการทำงานของแอพพลิเคชั่น จะได้ผลดังนี้


เริ่มต้นทักทาย กดปุ่ม OK






กรอกข้อความ แล้วกดปุ่ม เปลี่ยนข้อความ ข้อความ รักเมืองไทย จะแสดงในแถบด้านบน


คลิกเปลี่ยนสีพื้น
บทความข้างต้นนี้เป็นเพียงพื้นฐาน เป็น basic สำหรับผู้ที่เริ่มต้น สามารถนำไปประยุกต์และทำการดัดแปลงได้อีกมาก visual basic ไม่ได้ยากอย่างที่คิด