- Việc tạo GUI ở bài trước đã giải quyết vụ Nhập rồi, cho nên bài này ta chỉ nói đến vấn đề Xuất dữ liệu. Nhưng Xuất cái gì ra phần lớn phụ thuộc vào người đang sử dụng chứ không phải người tạo ra cái GUI đó. Với cương vị là người tạo ra GUI, thứ duy nhất tụi mình có thể làm là kiu chương trình đợi và hỏi xem Người Dùng muốn làm gì để mà phục vụ. Nếu hiểu đúng bạn sẽ thấy, tụi mình đang có 2 vấn đề cần giải quyết trước khi bàn đến chuyện phục vụ Người Dùng:
1. Đợi và Hỏi
Thứ nhất là Đợi người dùng ra lệnh, hay nói đúng hơn là đợi họ tương tác, đợi họ click chuột vào. Điều đó có nghĩa rằng phải làm cho GUI luôn hiện ra và ở bài trước tụi mình đã dùng hàm MsgBox(), nhưng hàm này lại dừng toàn bộ chương trình, không cho thực hiện bất kỳ câu lệnh nào trong lúc đợi. Thay vào đó ta có thể dùng 1 vòng lặp While hoặc Do vì chúng vẫn giữ được GUI mà lại cho phép ta chèn nhiều lệnh vào đó. Trong các ví dụ bên dưới tớ sẽ làm mẫu với While và hầu hết các Coder AutoIT đều dùng vòng lặp này, còn tại sao hay dùng While thì chỉ đơn giản vì trong File Help hay dùng nó :>
Tiếp theo là Hỏi xem người dùng muốn làm gì và dĩ nhiên là hỏi bằng lệnh chứ kg phải là ta đứng kế bên người đang dùng sản phẩm của ta mà hỏi :> Câu lệnh hỏi mà ta đang nói đến chính là GUIGetMsg(), nếu bỏ lệnh này trong vòng lặp While thì mỗi khi Người Dùng làm 1 cái gì đó với Gui nó sẽ trả về 1 giá trị tương ứng, chỉ cần 1 phép so sánh đơn giản là tụi mình có thể biết được người dùng đang làm gì trên GUI. Có 1 tin buồn rằng số lượng các giá trị mà GUIGetMsg() có thể trả về không phải là ít, rất khó nhớ và phân biệt được, nhưng lại có 1 tin vui khác là bạn không cần phải nhớ vì AutoIT đã đưa chúng vào các biến có Tên rất dễ phân biệt, bên dưới là ví dụ minh họa cho việc Đợi và Hỏi xem khi nào người dùng bấm Nút X (Tắt GUI).
#include <guiconstantsex.au3>;
GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
WEnd
- Nếu hiểu rõ về câu Lệnh If, chắc hẳn bạn sẽ thắc mắc rằng tại sao dòng lệnh 60 lại không bị lỗi bởi biến $GUI_EVENT_CLOSE chưa hề được khai báo. Thật ra biến này đã được khai báo trong file GUIConstantsEx.au3 và file này đã được Include vào chương trình ở dòng đầu tiên. Để làm việc với GUI bạn sẽ cần phải Include khoãn 5 đến 6 file như vậy, nhưng không phải là Include 1 lần tất cả, vì mỗi file chỉ khai báo sẵn những biến cho 1 loại Control nào đó.
- Một số bạn hỏi tớ làm sao để có được danh sách của tất cả tên biến và tên file au3 kể trên, câu trả lời là Trong file Help của AutoIT. Nhưng có một lời khuyên khác là không cần phải tìm đến danh sách này khi mới học AutoIT, bởi có tìm thấy tụi mình cũng chã biết làm gì với chúng, hơn nữa tuy số lượng của chúng nhiều nhưng chỉ dùng khoãn 2 đến 3 Biến là đủ có được 1 GUI tốt.
2. Sự Kiện Trên GUI
- Tụi mình đã biết cách làm cho GUI đợi rồi hỏi người dùng xem họ muốn gì để phục vụ, tụi mình cũng biết mỗi khi lệnh GUIGetMsg() trả về 1 giá trị tức là Người Dùng đã làm 1 thao tác gì đó, những thao tác ấy AutoIT gọi là Sự Kiện (Event), suy rộng ra 1 tý thì những biến giống như $GUI_EVENT_CLOSE sẽ được gọi là Biến Sự Kiện. - Nhưng AutoIT chỉ tạo Biến Sự Kiện cho 1 số Nút và Thao Tác mặc định luôn có trên GUI, đối với những Nút ta tự tạo thì sao? Đơn giản lắm.... AutoIT xem những biến chứa Mã Số của Control (Control ID) là Biến Sự Kiện, có được biến này bạn cũng chỉ cần làm 1 phép so sánh hệt như với $GUI_EVENT_CLOSE là xong, chạy thử ví dụ rồi bấm nút Nhập đi sẽ thấy:
GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm Nút Nhập")
WEnd
- Ở dòng 37, ta tạo 1 biến (ví dụ như $Nhap) để nhận giá trị trả về từ hàm GUICtrlCreateButton(), khi đó $Nhap sẽ là 1 Biến Sự Kiện, kết hợp với điều kiện kiểm tra khác tại dòng 63 thì bất kỳ lúc nào người dùng bấm nút Nhập, 1 Thông Báo sẽ được hiện ra, nếu thay thông báo đó bằng 1 lệnh gọi Hàm khác thì ta có thể làm vô khối chuyện mỗi khi người dùng bấm nút.
- Hầu hết các Control đều có thể tạo sự kiện cho nó, ví dụ như chữ Họ Tên trên GUI, tuy không phải là 1 Button, nhưng nếu tụi mình cũng tạo Biến Sự Kiện và đặt điều kiện kiểm tra cho nó trong vòng lặp While thì khi người dùng Bấm vào, nó vẫn hiện ra thông báo.
3. Xuất Nhập trên GUI
- Xét ở góc độ của 1 Coder, 1 người tạo GUI thì khái niệm Xuất Nhập không được rõ ràng lắm, bởi tất cả dữ liệu có thể dùng lệnh để hiển thị hoặc đọc ở bất kỳ đâu trên GUI. Còn xét ở góc độ Người Dùng thì đơn giản hơn, bất kỳ thao tác nào được thực hiện đều gọi là Nhập, còn sự phản hồi của GUI chính là Xuất. Nhưng nói lý thuyết chỉ để cho biết thôi vì bạn không cần phải quan tâm phân biệt nó làm gì, sau này làm nhiều tự khắc sẽ phân biệt được.
a) Lấy Dữ Liệu
- Cái cần quan tâm trước tiên là làm sao lấy được dữ liệu mà người dùng nhập vào. Việc này tưởng khó nhưng thật ra lại cũng rất dễ chỉ cần 1 hàm là đủ, đó là GUICtrlRead(controlID). Hàm này chỉ có 1 biến duy nhất... Control ID, vẫn câu hỏi củ là làm sao có được biến này? Nếu đến đây bạn vẫn không biết lấy Control ID ở đâu thì nên đọc lại từ đầu toàn bộ bài về GUI, vì từ giờ tớ sẽ không nói đến vấn đề này nữa.
#include <guiconstantsex.au3>
GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then MsgBox (0 ,"72ls.NET" ,GUICtrlRead ($HoTen_I))
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
WEnd
- Trong ví dụ, tớ tạo 1 biến chứa Control ID cho ô nhập Họ Tên (Dòng 8), sau đó truyền cho hàm GUICtrlRead() rồi đặt vào trong bảng thông báo của nút Nhập (Dòng 63), như vậy mỗi khi người dùng nhập họ tên vào và bấm nút Nhập, GUI sẽ hiện ra họ tên của người đó.
b) Xuất Dữ Liệu
- Bằng cách dùng 1 biến để nhận giá trị trả về của hàm GUICtrlRead() ta có thể làm được rất nhiều thứ, một trong số đó là xuất trở lại ra GUI và hàm làm được việc này là GUICtrlSetData(controlID, data) với biến Data là dữ liệu cần xuất, trong trường hợp của chúng ta chính là Biến chứa Họ Tên mà người dùng nhập vào. Ở ví dụ dưới tớ chọn Edit Box làm nơi xuất, do có thêm 1 số câu lệnh nên tớ sẽ tạo 1 Hàm có tên là NhapHoTen() để gắng vào nút Nhập:
#include <guiconstantsex.au3>
GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
MsgBox (0 ,"72ls.NET" ,$HoTen)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
EndFunc
- Hàm GUICtrlSetData() này cũng như GUICtrlRead() có thể được sử dụng ở bất kỳ đâu không nhất thiết phải là trong 1 sự kiện, ví dụ như ở trước vòng lặp While tớ gọi hàm GUICtrlSetData() để đưa nick mình (LeeSai) ra chỗ Nhập Họ Tên (Dòng 50), tương tự như vậy với ô Mô Tả (Edit Box):
#include <guiconstantsex.au3>
GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
EndFunc
c. Mở Rộng về GUI
- Để bài học bớt khô khan, tớ sẽ giới thiệu 1 thủ thuật khá thú vị đó là tạo Đồng Hồ trên thanh Tiêu Đề của Giao Diện.
Cách làm như sau:
- Đầu tiên bạn cần lấy được mã số của Giao Diện, cái này cũng giống như Control ID, tụi mình cũng tạo 1 biến (ví dụ như $Window) để hứng Window ID được trả về từ hàm GUICreate() (Dòng số 3).
- Tiếp theo truyền Window ID vào cho hàm WinSetTitle() rồi đặt vào bên trong vòng Lặp While, tức là ta sẽ thay đổi Tiêu Đề trong khi Chương trình đang Đợi người dùng tương tác (Dòng 75)
- Trong dòng 75, ta gõ lại tiêu đề củ của Window sau đó thêm các Macro thời gian vào. Nhưng vì vòng lặp While chạy quá nhanh nên tiêu đề của Window sẽ bị giật, tụi mình khắc phục lỗi này bằng cách thêm lệnh Sleep() vào vòng lặp.
#include <guiconstantsex.au3>
$Window=GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
;~ Tạo đồng hồ trên Tiêu Đề
WinSetTitle ($Window ,'' ,"72ls.NET " &@HOUR &":" &@MIN &":" &@SEC)
;Sleep(27)
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
EndFunc
- Lưu ý rằng nếu ta cho số Mili Giây trong hàm Sleep() quá lớn chương trình sẽ rất khó bắt được các sự kiện mà người dùng thực hiện và đương nhiên việc dùng Sleep chỉ là giải quyết tạm thời hiện tượng bị giật, ta còn rất nhiều cách khác thay thế, sau này có dịp tớ sẽ giới thiệu.
- Trước đây tớ đã từng nói, với cương vị là người tạo ra, tụi mình hoàn toàn có thể thay đổi GUI bằng dòng lệnh, tụi mình cũng đã thấy cách thay đổi dữ liệu trong các Control bằng hàm GUICtrlSetData(), vậy câu hỏi tiếp theo là ta có thể thay đổi trạng thái của Control bằng lệnh hay không? Tức là làm cho 1 Check Box từ Chưa Chọn thành Đã Chọn hay không?
4. Dữ Liệu và Trạng Thái của Control
- Đương nhiên là thực hiện được nếu bạn dùng hàm GUICtrlSetState(controlID, state) với state là trạng thái mà tụi mình muốn đổi. Cũng như Biến Sự Kiện, AutoIT đã tự tạo ra những biết dành cho Control gọi là Biến Trạng Thái, do các biến này cũng nằm trong file GUIConstantsEx.au3 cho nên ta không cần phải Include file nào nữa cả. Với Control là Check Box ta dùng biến $GUI_CHECKED để chọn và $GUI_UNCHECKED để bỏ chọn. Trong ví dụ dưới, tớ sẽ cho chương trình tự chọn Học Giỏi trước , khi bấm nút Nhập sẽ bỏ chọn Lắm Tiền nếu như người dùng có chọn nó .
#include <guiconstantsex.au3>
$Window=GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
$DepTrai_C=GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
$HocGioi_C=GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
$LamTien_C=GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;~ Chọn một Check Box
GUICtrlSetState ($HocGioi_C ,$GUI_CHECKED)
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
;~ Tạo đồng hồ trên Tiêu Đề
WinSetTitle ($Window ,'' ,"72ls.NET " &@HOUR &":" &@MIN &":" &@SEC)
Sleep (27)
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
;~ Bỏ chọn Lắm Tiền
GUICtrlSetState ($LamTien_C ,$GUI_UNCHECKED)
EndFunc
- Chỉ cần đối tượng là Control thì tất cả những hàm bắt đầu bằng GUICtrl...() đều có tác dụng, nhưng tùy theo loại Control mà sẽ thêm những hiệu ứng phụ khác. Ví dụ như với Radio, tuy có thể dùng hàm GUICtrlSetState() kết hợp với $GUI_CHECKED để chọn, nhưng do tính chất của Radio là chỉ chọn 1 Control trong 1 Group cho nên dù có bao nhiêu lệnh chọn thì tụi mình cũng chỉ thấy lệnh cuối cùng có tác dụng mà thôi .
#include <guiconstantsex.au3>
$Window=GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
$DepTrai_C=GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
$HocGioi_C=GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
$LamTien_C=GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
$KeoKiet_R=GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
$RongLuong_R=GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
$DaCoBo_R=GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
$ThatTinh_R=GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;~ Chọn một Check Box
GUICtrlSetState ($HocGioi_C ,$GUI_CHECKED)
;~ Chọn Radio Keo Kiệt=>Rộng Lượng
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
;~ Tạo đồng hồ trên Tiêu Đề
WinSetTitle ($Window ,'' ,"72ls.NET " &@HOUR &":" &@MIN &":" &@SEC)
Sleep (27)
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
;~ Bỏ chọn Lắm Tiền
GUICtrlSetState ($LamTien_C ,$GUI_UNCHECKED)
EndFunc
- Tương tự như vậy với hàm GUICtrlRead(), nếu dùng trên Input Box, Edit Box hoặc Lable thì nó sẽ trả về chuỗi, nhưng dùng trên CheckBox và Radio thì nó lại trả về số 1 nếu đã chọn và trả về số 4 nếu chưa chọn. Như thế thì chỉ có ích khi muốn kiểm tra tùy chọn, vậy khi cần lấy chuỗi của nó thì sao? Câu trả lời nằm ở biến thứ 2 của hàm GUICtrlRead(), nếu ta truyền số 1 vào biến này thì hàm sẽ trả về 1 giá trị khác tùy theo từng loại Control, trong trường hợp của CheckBox và Radio nó sẽ trả về chuỗi
#include <guiconstantsex.au3>
$Window=GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
$DepTrai_C=GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
$HocGioi_C=GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
$LamTien_C=GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
$KeoKiet_R=GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
$RongLuong_R=GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
$DaCoBo_R=GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
$ThatTinh_R=GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;~ Chọn một Check Box
GUICtrlSetState ($HocGioi_C ,$GUI_CHECKED)
;~ Chọn Radio Keo Kiệt=>Rộng Lượng
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
;~ Tạo đồng hồ trên Tiêu Đề
WinSetTitle ($Window ,'' ,"72ls.NET " &@HOUR &":" &@MIN &":" &@SEC)
Sleep (27)
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Lấy dữ liệu từ Check Box Đẹp Trai
$HoTen &=@CRLF &GUICtrlRead($DepTrai_C) & " (Không có số 1)"
$HoTen &=@CRLF &GUICtrlRead($DepTrai_C ,1) & " (Có số 1)"
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
;~ Bỏ chọn Lắm Tiền
GUICtrlSetState ($LamTien_C ,$GUI_UNCHECKED)
EndFunc
- Có thể bạn sẽ thấy cách hoạt động của các hàm này thật phiền phức và không thuận tiện cho lắm trong việc lấy dữ liệu, nhưng nếu dùng nhiều bạn sẽ quen và thấy rất tiện, bên dưới là ví dụ mở rộng cho phần này, bằng việc chọn hoặc không chọn các CheckBox và Radio, nội dung của Edit Box sau khi bấm nút Nhập sẽ khác nhau
#include <guiconstantsex.au3>;
$Window=GUICreate ("72ls.NET" ,400 ,250 ,100 ,200) ;Tạo Window
$HoTen=GUICtrlCreateLabel ("Họ Tên:" , 2 , 7 , 43 , 16) ;Tạo Label
GUICtrlSetBkColor (-1 ,0xFF0000) ;Chọn màu nên cho Label
$HoTen_I=GUICtrlCreateInput ("Nội dung" , 50 , 7 , 72 , 20) ;Tạo Input
$MoTa_E=GUICtrlCreateEdit ("" , 2 , 34 , 180 , 70) ;Tạo Edit
$DepTrai_C=GUICtrlCreateCheckbox ("Đẹp Trai" , 2 , 120) ;Tạo checkbox để chọn
$HocGioi_C=GUICtrlCreateCheckbox ("Học Giỏi" , 2 , 140) ;Tạo checkbox để chọn
$LamTien_C=GUICtrlCreateCheckbox ("Lắm Tiền" , 2 , 160) ;Tạo checkbox để chọn
$KeoKiet_R=GUICtrlCreateRadio ("Keo Kiệt " , 92 , 120) ;Tạo Radio để chọn
$RongLuong_R=GUICtrlCreateRadio ("Rộng Lượng " , 92 , 140) ;Tạo Radio để chọn
GUICtrlCreateGroup ("" ,-99 , -99 , 1 , 1) ;Tạo Group
$DaCoBo_R=GUICtrlCreateRadio ("Đã Có Bồ " , 92 , 170) ;Tạo checkbox để chọn
$ThatTinh_R=GUICtrlCreateRadio ("Thất Tình " , 92 , 190) ;Tạo checkbox để chọn
GUICtrlCreateGroup ("" , -99 , -99 , 1 , 1) ;Đóng Group
GUICtrlCreateTab (200 , 7 , 150 ,190) ;Tạo Tab nền
GUICtrlCreateTabItem ("List Control") ;Tạo vùng Tab của List Control
GUICtrlCreateList ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo List Control
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("Combo Box") ;Tạo vùng Tab của Combo Box
GUICtrlCreateCombo ("Nhà Lầu" ,210 , 37 , 100 ,90) ;Tạo ComboBox
GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay") ;Thêm dữ liệu vào ComboBox
GUICtrlCreateTabItem ("") ;Đóng Tab Nền
$Nhap=GUICtrlCreateButton ("Nhập" ,20 ,190 ,52) ;Tạo nút có chữ Nhập
$File=GUICtrlCreateMenu ("File") ;Tạo Menu File
GUICtrlCreateMenuItem ("Open" ,$File)
GUICtrlCreateMenuItem ("Save" ,$File)
GUICtrlCreateMenuItem ("" ,$File)
GUICtrlCreateMenuItem ("Exit" ,$File)
GUICtrlCreateMenu ("Edit") ;Tạo Menu Edit
GUISetState () ;Hàm để hiện GUI ra
;~ Đổi chuỗi hiện trong ô Nhập Họ Tên
GUICtrlSetData ($HoTen_I ,"LeeSai")
;~ Đổi chuỗi hiện trong ô Mô Tả
GUICtrlSetData ($MoTa_E ,"Mô Tả Người Dùng")
;~ Chọn một Check Box
GUICtrlSetState ($HocGioi_C ,$GUI_CHECKED)
;~ Chọn Radio Keo Kiệt=>Rộng Lượng
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($KeoKiet_R ,$GUI_CHECKED)
GUICtrlSetState ($RongLuong_R ,$GUI_CHECKED)
;Cho điều kiện của While luôn True.
;Vòng lặp không bao giờ dừng=>GUI luôn hiện
While True
;Hỏi xem người dùng muốn làm gì
;Câu trả lời sẽ được gán vào biến $Msg
$Msg=GUIGetMsg ()
;$GUI_EVENT_CLOSE tương ứng với việc người dùng bấm nút X tắt GUI
;Nếu $Msg là $GUI_EVENT_CLOSE thì thoát vòng lặp=>Kết thức chương trình
If $Msg=$GUI_EVENT_CLOSE Then ExitLoop
;~ Nếu người dùng bấm nút Nhập thì xuất ra 1 bản thông báo
If $Msg=$Nhap Then NhapHoTen()
;~ Nếu người dùng bấm vào chữ Họ Tên thì xuất ra 1 bản thông báo
If $Msg=$HoTen Then MsgBox (0 ,"72ls.NET" ,"Người Dùng đã bấm vào chữ Họ Tên")
;~ Tạo đồng hồ trên Tiêu Đề
WinSetTitle ($Window ,'' ,"72ls.NET " &@HOUR &":" &@MIN &":" &@SEC)
Sleep (27)
WEnd
;~ Xử lý khi bấm nút Nhập
Func NhapHoTen()
;~ Tạo 1 biến Khu Vực chứ họ tên được nhập vào
Local $HoTen=GUICtrlRead ($HoTen_I)
;~ Lấy dữ liệu từ các Check Box
If GUICtrlRead ($DepTrai_C)==1 Then $HoTen &=@CRLF &GUICtrlRead($DepTrai_C ,1)
If GUICtrlRead ($HocGioi_C)==1 Then $HoTen &=@CRLF &GUICtrlRead($HocGioi_C ,1)
If GUICtrlRead ($LamTien_C)==1 Then $HoTen &=@CRLF &GUICtrlRead($LamTien_C ,1)
;~ Lấy dữ liệu từ các Radio
If GUICtrlRead ($KeoKiet_R)==1 Then $HoTen &=@CRLF &GUICtrlRead($KeoKiet_R ,1)
If GUICtrlRead ($RongLuong_R)==1 Then $HoTen &=@CRLF &GUICtrlRead($RongLuong_R ,1)
If GUICtrlRead ($DaCoBo_R)==1 Then $HoTen &=@CRLF &GUICtrlRead($DaCoBo_R ,1)
If GUICtrlRead ($ThatTinh_R)==1 Then $HoTen &=@CRLF &GUICtrlRead($ThatTinh_R ,1)
;~ Đưa họ tên vào EditBox
GUICtrlSetData ($MoTa_E ,$Hoten)
;~ Bỏ chọn Lắm Tiền
GUICtrlSetState ($LamTien_C ,$GUI_UNCHECKED)
EndFunc
5. Tổng Kết Hàm trên GUI
- Số lượng hàm trong 2 bài về GUI mà tụi mình học được đã khá nhiều và rõ ràng đó chưa phải là tất cả, nhưng trong chương trình cơ bản này chỉ cần nắm chừng đó là đủ. Những hàm còn lại tụi mình sẽ tiếp tục học trong các chương trình khác cao hơn hoặc tự bản thân mọi người sẽ tìm ra trong quá trình làm việc với AutoIT.
- Chắc chắn 1 điều rằng, kiến thức mà mọi người có được sau loạt bài này không đủ để hoàn thành 100% yêu cầu của Quản Lý Học Sinh, bởi tớ đã cố tình để 1 lỗ hỗng trong kiến thức với mong muốn AE tập thói quen tự nghiên cứu, dù rằng tớ có thể hướng dẫn đầy đủ nhưng đó không phải là cách truyền đạt kiến thức tốt nhất.
- Bên dưới là danh sách các Hàm Tương Tác với GUI để mọi người tổng kết lại những gì đã học. Đến đây loạt bài Nhập Môn Lập Trình Với Auto cũng đã đến hồi kết thúc sau 1 thời gian "rất" dài biên soạn :> Cám ơn mọi người đã bỏ thời gian xem loạt bài này
- GUICreate(): Tạo Window
- GUISetState(): Cho GUI hiện ra
- GUISet..(): Các hàm hiệu chỉnh Window
- GUIGetMsg(): Lấy giá trị các sự kiện
- WinSetTitle(): Thay đổi tiêu đề của Window
- GUICtrlCreate...(): Tạo các Control
- GUICtrlSetBkColor(): Thay đổi màu nền của Control
- GUICtrlSetData(): Thay đổi dữ liệu (Chuỗi) của Control
- GUICtrlSetState(): Thay đổi trạng thái của Control
- GUICtrlSet..(): Các hàm hiệu chỉnh Control