Trở về
Tham gia nhóm m Autoit đ đưc hưng dn và gii đáp trc tiếp : http://fb.com/groups/autoitscript
Tin tức công nghệ  -  Thủ thuật lập trình

Saturday, September 28, 2013

Giao diện người dùng - Autoit GUI (Phần 2)


Toàn màn hìnhIn bài viết



- 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 đợihỏ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

Good luck 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ó :>

Good luck 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ớ Tongue 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 ĐợiHỏ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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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=&gt;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:
  1. Đầ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).
  2. 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)
  3. 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=&gt;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=&gt;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 " &amp;@HOUR &amp;":" &amp;@MIN &amp;":" &amp;@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=&gt;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=&gt;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 " &amp;@HOUR &amp;":" &amp;@MIN &amp;":" &amp;@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=&gt;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=&gt;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=&gt;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 " &amp;@HOUR &amp;":" &amp;@MIN &amp;":" &amp;@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=&gt;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=&gt;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=&gt;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 " &amp;@HOUR &amp;":" &amp;@MIN &amp;":" &amp;@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 &amp;=@CRLF &amp;GUICtrlRead($DepTrai_C) &amp; "  (Không có số 1)" 
        $HoTen &amp;=@CRLF &amp;GUICtrlRead($DepTrai_C ,1) &amp; " (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=&gt;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=&gt;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=&gt;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 " &amp;@HOUR &amp;":" &amp;@MIN &amp;":" &amp;@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 &amp;=@CRLF &amp;GUICtrlRead($DepTrai_C ,1)
        If  GUICtrlRead ($HocGioi_C)==1 Then  $HoTen &amp;=@CRLF &amp;GUICtrlRead($HocGioi_C ,1)
        If  GUICtrlRead ($LamTien_C)==1 Then  $HoTen &amp;=@CRLF &amp;GUICtrlRead($LamTien_C ,1)
      
    ;~  Lấy dữ liệu từ các Radio 
        If  GUICtrlRead ($KeoKiet_R)==1 Then  $HoTen &amp;=@CRLF &amp;GUICtrlRead($KeoKiet_R ,1)
        If  GUICtrlRead ($RongLuong_R)==1 Then  $HoTen &amp;=@CRLF &amp;GUICtrlRead($RongLuong_R ,1)
        If  GUICtrlRead ($DaCoBo_R)==1 Then  $HoTen &amp;=@CRLF &amp;GUICtrlRead($DaCoBo_R ,1)
        If  GUICtrlRead ($ThatTinh_R)==1 Then  $HoTen &amp;=@CRLF &amp;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 Love struck
  1. GUICreate(): Tạo Window
  2. GUISetState(): Cho GUI hiện ra
  3. GUISet..(): Các hàm hiệu chỉnh Window
  4. GUIGetMsg(): Lấy giá trị các sự kiện
  5. WinSetTitle(): Thay đổi tiêu đề của Window
  6. GUICtrlCreate...(): Tạo các Control
  7. GUICtrlSetBkColor(): Thay đổi màu nền của Control
  8. GUICtrlSetData(): Thay đổi dữ liệu (Chuỗi) của Control
  9. GUICtrlSetState(): Thay đổi trạng thái của Control
  10. GUICtrlSet..(): Các hàm hiệu chỉnh Control