Chương Hai- Viết chương trình Bạn làm quen với môi trường triển khai lập trình (Integrated Development Environment - IDE) MS VB6 nóng ruột muốn viết dòng mã để chào mừng giới Ta thử ôn lại số vấn đề mà có lẽ bạn biết Một chương trình Visual Basic gồm có phần mã lập trình hình ảnh (visual components) Bạn thiết kế phần hình ảnh cách dùng đồ nghề (Controls hay Objects) từ Túi đồ nghề (Toolbox) nằm bên trái Nếu bạn không thấy Túi đồ nghề dùng mệnh lệnh Menu View|Toolbox để bắt Khi bạn bắt đầu thiết kế chương trình cách chọn Standard EXE, môi trường triển khai lập trình (IDE) cho bạn sẵn Form tên Form1 Bạn đổi tên (Name) cửa sổ Propeties nằm phía bên phải (trong hình ta edit Name property Form1 thành frmMainForm) Bạn sửa đề tựa (Title) form có ý nghĩa cách đổi Caption form cửa sổ Propeties (trong hình ta edit Caption property form thành "Chi tiet cua ban toi") Sắp đặt vật dụng lên Form Muốn đặt Control lên Form, click hình Control Toolbox Drag (bấm nút trái chuột kéo cho thành hình chữ nhật trước buông nút trái ra) chuột Form vẽ thành cở Control Những Controls bạn dùng thường từ Toolbox Label (nhãn), Textbox (hộp để đánh chữ vào) CommandButton (nút bấm mệnh lệnh) Trong hình ta có ba Label ba Textbox Muốn sửa chữ Label1 "Ten" edit Property Caption Còn Textbox không dùng Property Caption mà dùng Property Text Ta thay đổi Property Caption Text chạy chương trình (at run-time) Trong lúc thiết kế (design time) bạn sửa đổi kiểu chữ Controls cách edit Property Font chúng cửa sổ Properties (click bên phải Property Font Properties Window, IDE pop-up Font dialog để bạn lựa chọn đặc tính Font hình đây) 1/2 Nếu bạn thấy bực cở chữ tự có (default size) Control nhỏ, bạn giải cách sửa cở chữ Form cho lớn Vì Control đặt lên Form, thừa kế cở chử Form Để xếp cho số Control thẳng hàng với bạn chọn nhóm dùng mệnh lệnh Menu Format| Align|Lefts v.v Nếu bạn chưa biết cách chọn nhóm Control có hai cách Cách thứ bạn đè nút Shift click Control bạn muốn chọn Cái Control mà bạn chọn sau chuẩn để Control khác làm giống theo Cách thứ hai Drag cho sợi dây thun (rubber band) bọc chung quanh Control Trong trường hợp Control nầy nằm container, thí dụ khung (Frame) hay PictureBox, bạn phải click Form trước, đè nút Ctrl Drag rubber band bao Control Chứa thứ dự án VB Tới bạn để ý thấy cửa sổ bên phải, phía trên, gọi Project Explorer, có hình giống (tree) cho thấy ta có Form Project (dự án) Project cách tiện dụng để ta xếp cần thiết cho dự án Thường dự án có nhiều Form cần thứ khác Mỗi Form chứa vào đĩa dạng "frmMainForm.frm" Bạn save form menu command File | Save formfilename.frm Nếu Form1 có chứa hình ảnh (thí dụ bạn dùng Properties Window để chọn icon hình gương mặt cười làm icon cho frmMainForm) hình ảnh frmMainForm đuợc tự động chứa hồ sơ "frmMainForm.frx" Lưu ý không thiết tên hồ sơ (file) mà bạn phải cho biết chứa (save) phải giống tên Form mà bạn dùng chương trình Tuy nhiên bạn nên dùng tên cho hai để sau nầy dễ tìm hồ sơ có thất lạc Theo qui ước thông thường, Form đặt tên bắt đầu "frm", thí dụ "frmMainForm" Khi bạn save Project có nghĩa save tất hồ sơ dùng cho dự án, kể Form hồ sơ cho Project, thí dụ "MyFirstProg.vbp" ("vbp" viết tắt chữ Visual Basic Project) Bạn save Vb6 project menu command File | Save Project À, muốn đổi tên Project, bạn click lên hàng bên phải cửa sổ Project Explorer (Project1 (Project1.vbp)), edit tên Project cửa sổ Properties phía Bạn nên chứa tất hồ sơ dùng cho Project tập (Folder/Directory) Bạn dùng Notepad để mở xem chơi, coi "frmMainForm.frm" có Bạn thấy gồm có hai phần: phần đầu diễn tả Control nằm Form, phần lại mã lập trình mà bạn viết Bạn ý properties mà bạn sửa cho Control ghi lại phần đầu nói VB dựa vào phần diễn tả Control để thiết lập lại (reconstruct) hình ảnh Form 2/2 Sau nầy, lão luyện VB, bạn dùng chương trình tự động chế (generate) hàng diễn tả Control cho Form Đó kỹ thuật dùng Wizards VB để chế số chương trình khởi đầu cho từ bảng kẻm (Template) Thêm mã lập trình để xử lý cố Hầu hết lập trình Visual Basic viết mã để xử lý cố (Event) Thí dụ muốn chấm dứt chương trình, người sử dụng click nút "Xuat" Để thực điều nầy triển khai chương trình bạn doubleClick (click liên tiếp lần) nút "Xuat" VB IDE viết sẵn cho bạn vỏ Subroutine: Private Sub cmdXuat_Click() End ' Bạn viết thêm dòng nầy để kết thúc chương trình End Sub Để ý tên (Name) nút Xuat "cmdXuat" ("cmd" viết tắt chữ CommandButton), VB gắn thêm dấu gạch Event Click để làm thành tên cmdXuat_Click Sub, chương trình nhỏ xử lý người sử dụng click nút Xuat Chương trình nhỏ hay Subroutine nầy gọi Event Handler cho Event Click Hàng chữ xanh dùng để giải thích cho lập trình viên (gọi Comment), VB hoàn toàn không ý đến xử lý Sub cmdXuat_Click Comment có nghĩa thích TrongVB thích bắt đầu dấu single quote ' Khi VB thấy dấu nầy bỏ qua lại dòng mã Là Lập trình viên chuyên nghiệp bạn nên tập thói quen dùng Comment nơi để giúp người khác bạn hiểu chương trình Nên nhớ tiền phí tổn để bảo trì chương trình tương đương với số tiền bỏ lần đầu để triển khai Bảo trì có nghĩa thăm viếng lại chương trình để sửa lỗi (fix bug) thêm đặc điểm cho hay (enhancement) 3/2 Nói chung hể bạn làm điều bí hiểm hay cắc cớ làm ơn giải thích rõ ràng Nếu muốn cắt dòng mã VB làm hai dòng chấm dứt dòng thứ dấu gạch _ Tiếp theo, bạn doubleClick nút "Viet vao dia" viết hàng mã sau: Private Sub cmdViet_Click() Open "myFriends.txt" For Output As #2 ' Mở hồ sơ để viết gọi cổng số ' Viết vào cổng số 2: Tên, Địa Tuổi, ngăn cách dấu chấm phẩy Print #2, txtTen & ";" & txtDiachi & ";" & txtTuoi Close #2 ' Đóng cổng số End Sub Trong Sub cmdViet_Click, trước hết ta mở hồ sơ tên "myFriends.txt" gọi cổng số Sau mở hồ sơ để viết ta ráp Tên, Địa Tuổi lại, ngăn cách dấu chấm phẩy (;) để đánh dấu nhỡ sau nầy ta muốn gở riêng ba thứ trở lại Dấu "&" operator để ráp (concatenate) hai dòng chữ (text string) lại với Print #2 có nghĩa viết cổng số 2, tức hồ sơ "myFriends.txt" Thứ viết cổng Tên, Địa Tuổi (txtTen & ";" & txtDiachi & ";" & txtTuoi) Những rắc rối việc mở hồ sơ Cái cổng số ta tự chọn (arbitrary) Thật muốn gọi cổng số được, miễn chưa có phần khác chương trình nầy dùng cổng số Đây cách VB làm việc cho tiện thay gọi nguyên tên hồ sơ dài Nếu muốn chắn không trùng số cổng với chỗ khác, ta làm sau: fileNo = freefile Rồi thay số chữ fileNo Sub cmdViet_Click freeFile Function (chương trình nhỏ dùng để tính thứ gì) nhờ VB cấp phát cho số đại diện hồ sơ chưa dùng Chữ Output câu ( Open "myFriends.txt" For Output As #2 ) dùng để nói từ CPU (Central Processing Unit) ta muốn "viết ra" hồ sơ Khi mở hồ sơ để viết kiểu nầy hồ sơ chưa có dựng nên (created) Nếu hồ sơ có bị xoá bỏ (delete) đồng thời hồ sơ trống dựng nên Động từ chuyên môn "viết chồng lên" (overwrite) Nếu ta mở hồ sơ để "đọc vào" dùng chữ "Input" thay "Output" Còn "viết thêm" vào hồ sơ có sẵn (chớ không overwrite hồ sơ ấy) dùng chữ "Append" thay "Output" Trong trường hợp bạn phải kiểm xem hồ sơ "myFriends.txt" có sẵn chưa Bạn viết sau: If Dir("myFriends.txt") "" then ' Nếu hồ sơ "myFriends.txt" hữu Open "myFriends.txt" For Append As #2 ' Mở hồ sơ để viết thêm gọi cổng số Else Open "myFriends.txt" For Output As #2 ' Mở hồ sơ để viết gọi cổng số End If Function Dir("myFriends.txt") dùng cho ta tên hồ sơ hồ sơ hữu, ngược lại cho dòng chữ trống (empty string), biểu hiệu "" Tại đây, lanh ý bạn hỏi hồ sơ "myFriends.txt" nằm folder Câu trả lời Nếu bạn chưa chứa (save) chương trình vào dĩa (vì viết) nằm folder VB6.EXE Còn chứa chương trình có lẽ nằm folder chương trình bạn Muốn hồ sơ "myFriends.txt" luôn với chương trình, bạn làm sau: MyLocalFolder = App.path ' Lấy folder chương trình xử lý bạn If Right(MyLocalFolder,1) "\" then ' Nếu chữ cuối backslash MyLocalFolder = MyLocalFolder & "\" ' gắn thêm backslash cuối End If ' Mở hồ sơ với tên có folder (full pathname) để viết gọi cổng số Open MyLocalFolder & "myFriends.txt" For Output As #2 4/2 Cuối ta đóng hồ sơ lại câu Close #2 Từ VB cấp số để làm cổng cho chỗ khác chương trình Default Property Control "txtTen" dùng viết tắt cho "txtTen.text", Default Property TextBox text Default Property Control Property VB dùng bạn cho tên Control mà Trong Default Property Label Caption Vì txtTen dùng txtTen.txt để nói đến dòng chữ, nên chương trình ta nhắc đến y variable (mã số) dùng cho string Do với qui ước dùng ba chữ đầu "txt" cho tên Textbox giúp ta nhận diện string variable bình thường Hãy lưu ý khác biệt gọi Sub hai trường hợp sau: Call CheckmyTextbox (txtDiachi) ' txtDiachi xem Textbox trọn vẹn CheckmyTextbox txtDiachi ' txtDiachi xem txtDiachi.text, dòng chữ Thứ tự Control Form Trong chương trình nầy ta muốn người xử dụng cho vào kiện theo thứ tự "Tên, Địa chỉ, Tuổi" Khi vào, ta muốn dấu chớp tắt (cursor ) nằm txtTen để người xử dụng khỏi công click vào Textbox muốn mang cursor trở lại Ta nói txtTen có Focus Sau người xử dụng cho tên vào rồi, cô đánh nút Tab để di chuyển cursor qua Control tiếp theo, mà ta muốn txtDiachi Để thứ tự Control cho di chuyển cursor người xử dụng đánh nút Tab ta edit Property TabIndex Control TabIndex bắt đầu số Nhiều người xử dụng thích dùng nút Enter thay Tab để di chuyển Cursor qua Control tiếp theo, bạn làm sau cho Textbox txtTen: Private Sub txtTen_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' Nếu nút bấm Enter SendKeys "{TAB}" ' giả mạo gởi nút Tab KeyAscii = ' Nuốt trọng nút Enter để Windows không lo cho End If End Sub Cho Textbox khác txtDiachi, txtTuoi bạn làm tương tợ Khi bạn doubleClick txtTen lần đầu để viết mã, VB cho bạn Private Sub txtTen_Change() Bạn phải click Combobox bên phải, phía Code Window, cho mở chọn Event KeyPress Nếu bạn muốn chương trình chuyên nghiệp hơn, bạn cho phép người xử dụng bấm nút Alt+o (bấm nút Alt xuống bấm nút o) để mang Cursor txtTuoi hay Alt+d để mang Cursor txtDiachi Muốn bạn phải thêm vào dấu "&" phía trước chữ T, D o Caption label lblTen, lblDiachi lblTuoi Kế bạn phải cho giá trị TabIndex lblTen, txtTen, lblDiachi, txtDiachi, lblTuoi, txtTuoi liên tiếp 0,1,2,3,4,5 Khi người xử dụng đánh Alt+o, VB mang Cursor nhãn lblTuoi, chỗ cho đáp label nên phải đáp vào Control kế đó, tức txtTuoi Khi ta cho TabIndex Control giá trị kể Form Cursor nằm 5/2 TextBox txtTen lblTen có TabIndex nhỏ nhất(0), chỗ Cursor đáp lên được, nên Cursor phải đáp lên textbox có TabIndex value kế đó, tức Nếu bạn không muốn Cursor ngừng lại TextBox edit Property TabStop TextBox cho False Trong trường hợp người sử dụng click vào TextBox sửa dòng chữ thường Nếu bạn thật không muốn cho phép người sử dụng sửa TextBox edit Property Enabled False hay Property Locked True Khi Enabled TextBox False TextBox trở nên mờ Nhân tiện ta edit thêm dấu "&" phía trước chữ X V Caption CommandButton "Xuat" "Viet vao dia" Sau nầy người sử dụng bấm Alt-X coi tương đương với click nút "Xuat" Nếu nhỡ Form bạn có nhiều Textbox quá, đổi nút Enter nút Tab cho Textbox công Bạn làm chung cho Form Tức nói bạn không cần biết nút Enter vừa đánh TextBox nào, bạn nhắm mắt đổi nút Tab Trước hết bạn phải chọn (select) Form edit Property KeyPreview thành True Bạn làm việc nầy để dặn Form giựt nút người sử dụng đánh (keystroke) trước TextBox thấy Form tráo nút Enter thành Tab lẵng lặng trao cho TextBox Bạn thay tất KeyPress event handler TextBox đoạn mã sau: Private Sub Form_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then ' Nếu nút bấm Enter SendKeys "{TAB}" ' giả mạo gởi nút Tab KeyAscii = ' Nuốt trọng nút Enter để Windows không lo cho End If End Sub Khi bạn doubleClick lên chỗ Form Control nằm, lần đầu để viết mã, VB cho bạn Private Sub Form_Load() Bạn phải click Combobox bên phải, phía Code Window, cho mở chọn Event KeyPress Đem trình làng Để làm thành hồ sơ áp dụng EXE, bạn dùng mệnh lệnh Menu File|Make MyFirstProg.exe Cho thêm chút hương vị đời click Form edit Property Icon, chọn cho từ folder: D:\Program Files\Microsoft Visual Studio\Common\Graphics\Icons\Misc icon hình gương mặt cười Rồi bấm mệnh lệnh Menu File|Save Project Khi dùng Explorer để xem hồ sơ MyFirstProg.vbp bạn thấy đây: Đáng lẽ dùng folder khác thay VB98 để chứa dự án MyFirstProg.vbp Hồ sơ MyFirstProg.vbw Workspace (chỗ làm việc) dành cho VB, ta không nên động tới Bạn làm Shortcut cho MyFirstProg.exe với icon hình gương mặt cười đặt lên Desktop để chạy bên IDE VB Có lẽ bạn muốn Download hồ sơ:MyFirstProg.zip, nén chung tất hồ sơ nói dự án MyFirstProg.vbp 6/2 Bây VB IDE bạn chạy chương trình cách dùng mệnh lệnh Menu Run|Start hay bấm F5 Bạn Click lên dấu tam giác bên phải (nút Play cassette) nằm toolbar phía VB menu Cách nén files folder thành zip file Để gởi nhiều files cách đính kèm (attach) Email Internet ta cần phải nén files thành file nhất, gọi Zip file Trước hết, Window Explorer bạn chọn files bạn muốn Zip chung lại Bạn chọn nhiều files cách đè nút Ctrl click lên tên file Nếu bạn đè lên nút Shift, thay nút Ctrl, lúc bạn click, Window Explorer select dọc tên files nằm tên hai files bạn click Ngoài bạn dùng Menu Command Edit | Select All, hay Ctrl+A để select tất files folder Đây trường hợp bạn dùng Zip tất cảc files VB6 project để gởi qua Thầy/Cô Sau select file rồi, bạn right click lên file để context menu pop-up Chọn Add to Zip Nếu bạn không thấy pop-up command Add to Zip bạn chưa install chương trình Winzip Trong trường hợp ấy, download Winzip từ Internet install Bây bạn thử khởi động VB6, dạo quanh để thử biết phần VB6 IDE, thử làm theo nầy Nếu có thắc mắc hỏi Tutor bạn 7/2 ... Explorer để xem hồ sơ MyFirstProg.vbp bạn thấy đây: Đáng lẽ dùng folder khác thay VB9 8 để chứa dự án MyFirstProg.vbp Hồ sơ MyFirstProg.vbw Workspace (chỗ làm việc) dành cho VB, ta không nên động tới... thích cho lập trình viên (gọi Comment), VB hoàn toàn không ý đến xử lý Sub cmdXuat_Click Comment có nghĩa thích Trong VB thích bắt đầu dấu single quote ' Khi VB thấy dấu nầy bỏ qua lại dòng mã Là... đặt lên Desktop để chạy bên IDE VB Có lẽ bạn muốn Download hồ sơ:MyFirstProg.zip, nén chung tất hồ sơ nói dự án MyFirstProg.vbp 6/2 Bây VB IDE bạn chạy chương trình cách dùng mệnh lệnh Menu Run|Start