Trang Chủ   Vn+ TiVi   Fanpage Twitter  Fanpage FaceBook
Loading
                                         

Bản Tin Câu Lạc Bộ Pa Tin Im-Pod                                                                          
Diễn đàn Vn+
Tiêu Điểm

Tình Yêu - Giới Tính

1001 Bí Ẩn

Tổng hợp phần mềm

Ebook

Thủ Thuật IT

Thủ Thuật Blog

Video Clip

Lạ & Fun


You are not connected. Please login or register

Xem chủ đề cũ hơn Xem chủ đề mới hơn Go down  Thông điệp [Trang 1 trong tổng số 1 trang]

Trunks-Kun

Trunks-Kun
Administrator
Administrator
Thật chấ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 đợ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ớ :p 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).

Code:
    #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 đó. Bài viết được đăng trên trang web autoit.72ls.net, mong đọc giả vào xem để ủng hộ Anh Em trong Forum viết tiếp.

- 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.

Trunks-Kun

Trunks-Kun
Administrator
Administrator
2. Sự Kiện Trên GUI

đã 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:

Code:
    #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
   
    $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.

Trunks-Kun

Trunks-Kun
Administrator
Administrator
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,


Code:
    #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 Cool, 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:

Code:
    #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):

Code:
    #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.

Code:
    #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ế,

Trunks-Kun

Trunks-Kun
Administrator
Administrator

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 (Dòng 57), 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ó (Dòng 92).

Code:
    #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 (Dòng 60).

Code:
    #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 (Dòng 97)

Code:
    #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 (Dòng 97)

Code:
    #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

Trunks-Kun

Trunks-Kun
Administrator
Administrator
5. Tổng Kết Hàm trên GUI

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

Giao diện cho phép nhập vào 2 số, có 4 Radio tương ứng với 4 phép tính: Cộng, Trừ, Nhân, Chia. Ngoài ra có 1 nút Tính và 1 Nơi Xuất kết quả tính được.

Có 1 Inputbox, 1 Lable. Mỗi khi nhập 1 chuỗi bất kỳ vào InputBox, chuỗi đó sẽ xuất hiện và chạy từ trái sang phải trong Lable. Không cần có Button.

Giao diện chỉ hiển thị đồng hồ hệ thống dang số trong 1 Lable. Có 1 tùy chọn để chuyển đổi qua lại giữ định dạng 12h và 24h. Tức là 16h sẽ chuyển thành 4h

...

Code cho máy tính đơn giản:

Code:
    #NoTrayIcon
    #include <GUIConstants.au3>
    #include <EditConstants.au3>
    #include <ButtonConstants.au3>
    Global $Msg
    $GUI = GUICreate("Calculator for amateur", 230, 230)
    $GUI_Input_1 = GUICtrlCreateInput("", 10, 10, 100, -1, $ES_NUMBER + $ES_RIGHT)
    $GUI_Input_2 = GUICtrlCreateInput("", 120, 10, 100, -1, $ES_NUMBER + $ES_RIGHT)
    $GUI_Input_3 = GUICtrlCreateInput("", 10, 40, 210, -1, $ES_RIGHT + $ES_READONLY)
    ;GUICtrlSetState(-1, $GUI_DISABLE)
   
   
    GUICtrlCreateGroup("Máy tính", 10, 70, 210, 110)
        $GUI_Radio_Plus = GUICtrlCreateRadio("Phép cộng", 20, 90)
        GUICtrlSetState(-1, $GUI_CHECKED)
        $GUI_Radio_Minus = GUICtrlCreateRadio("Phép trừ", 20, 110)
        $GUI_Radio_Of = GUICtrlCreateRadio("Phép nhân", 20, 130)
        $GUI_Radio_Divided = GUICtrlCreateRadio("Phép chia", 20, 150)
    GUICtrlCreateGroup("", -99, -99, 1, 1)  ;close group
   
    $GUI_Button_1 = GUICtrlCreateButton("Tính", 10, 190, 100, -1, $BS_DEFPUSHBUTTON)
    $GUI_Button_2 = GUICtrlCreateButton("Xóa dữ liệu", 120, 190, 100)
     
    GUISetState()
    GUICtrlSetState($GUI_Input_1, $GUI_FOCUS)
   
    While 1
        $Msg = GUIGetMsg()
        Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
        Case $GUI_Button_1
            Select
            Case BitAND(GUICtrlRead($GUI_Radio_Plus), $GUI_CHECKED) = $GUI_CHECKED
                GUICtrlSetData($GUI_Input_3, GUICtrlRead($GUI_Input_1) + GUICtrlRead($GUI_Input_2))
            Case BitAND(GUICtrlRead($GUI_Radio_Minus), $GUI_CHECKED) = $GUI_CHECKED
                GUICtrlSetData($GUI_Input_3, GUICtrlRead($GUI_Input_1) - GUICtrlRead($GUI_Input_2))
            Case BitAND(GUICtrlRead($GUI_Radio_Of), $GUI_CHECKED) = $GUI_CHECKED
                GUICtrlSetData($GUI_Input_3, GUICtrlRead($GUI_Input_1) * GUICtrlRead($GUI_Input_2))
            Case BitAND(GUICtrlRead($GUI_Radio_Divided), $GUI_CHECKED) = $GUI_CHECKED
                If GUICtrlRead($GUI_Input_2)=0 Then
                    GUICtrlSetData($GUI_Input_3, "ERROR")
                Else
                    GUICtrlSetData($GUI_Input_3, GUICtrlRead($GUI_Input_1) / GUICtrlRead($GUI_Input_2))
                EndIf
            EndSelect
            GUICtrlSetState($GUI_Input_1, $GUI_FOCUS)
        Case $GUI_Button_2
            GUICtrlSetData($GUI_Input_1, "")
            GUICtrlSetData($GUI_Input_2, "")
            GUICtrlSetData($GUI_Input_3, "")
            GUICtrlSetState($GUI_Input_1, $GUI_FOCUS)
        EndSwitch
    WEnd

Code cho chữ chạy:

Code:
    #include <GUIConstants.au3>
    #include <StaticConstants.au3>
   
    Global $Msg, $ControlPos, $GUIPos
    $InputBox = InputBox("Nhập chuỗi", "Nhập chuỗi")
    $GUI = GUICreate("Test", 220)
    $GUI_Label = GUICtrlCreateLabel($InputBox, 10, 10)
    GUISetState()
   
    While 1
        $Msg = GUIGetMsg()
        _Control_Marquee($GUI, $GUI_Label, 0)
        Switch $Msg
        Case $GUI_EVENT_CLOSE
            Exit
        EndSwitch
        Sleep(100)
    WEnd
    Func _Control_Marquee($HandleGui, $ControlID, $Speed=100)
        ;$Style = 0 : chạy từ trái sang phải
        ;$Style = 1 : chạy từ phải sang trái
        ;$Style = 2 : chạy qua lại
        Local $GUIPos
        Local $ControlPos
        Local $ControlPosOld = ControlGetPos($HandleGui, "", $ControlID)
        Local $Temp = 0
        While 1
            $Msg = GUIGetMsg()
            If $Msg = $GUI_EVENT_CLOSE Then Exit
            $GUIPos = WinGetPos($HandleGui)
            $ControlPos = ControlGetPos($HandleGui, "", $ControlID)
            If $Temp > $GUIPos[2] Then
                ControlMove($HandleGui, "", $ControlID, 0, $ControlPosOld[1])
                $Temp = 0
            EndIf
            ControlMove($HandleGui, "", $ControlID, $Temp, $ControlPos[1])
            $Temp +=1
            Sleep($Speed)
        WEnd
    EndFunc

Sponsored content


Xem chủ đề cũ hơn Xem chủ đề mới hơn Về Đầu Trang  Thông điệp [Trang 1 trong tổng số 1 trang]

Permissions in this forum:
Bạn không có quyền trả lời bài viết

 

Legend :  [ Vn-plus Founder ] [ Administrator ] [ Super Moderator ] [ Moderator ] [ Member ] [ VIP member ] [ banned ]



Free Auto Backlink Exchange ServiceFree Backlink Exchange For SeoVietnam BacklinksTravel BacklinksFree BacklinksText Backlink ExchangesText Back Link ExchangeFlorists LinksOverShopping Link ExchangeFree Automatic LinkWeb Link Exchange - Linkcsere

    Diễn Đàn Vn-Plus.Org | Thống kê | Liên hệ | Báo cáo lạm dụng  | Bạn muốn quảng cáo | Lên Đầu Trang

    Powered by: PHPBB2. Copyright © 2011  Diễn Đàn Mở VN+
    Contact: Vn-plus Founder . Yahoo: Nobita_xuka_ccy. Địa chỉ: Từ Tây - Yên Phú - Yên Mỹ - Hưng Yên
    BQT không chịu trách nhiệm bất cứ nội dung nào của thành viên đăng tải

Liên Kết Vớivn+

Create a forum on Forumotion | Internet | Computers | ©phpBB | Free forum support | Báo cáo lạm dụng | Thảo luận mới nhất