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 1)


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

Lý thuyết về GUI trong AutoIT


- GUI: viết tắt của Graphic User Interface có nghĩa là Giao Diện Người Dùng. Với AutoIT, GUI được chia làm 3 loại:
  1. Đối Tượng - Control: Những cái này không có gì xa lạ cả, chúng là những cái Nút (Button), những chỗ nhập dữ liệu (Input), những ô vuông để chọn (check box),... tương ứng với mỗi Control chúng ta sẽ có 1 hàm để tạo ra nó.
  2. Cửa Sổ - Window: Một ứng dụng nếu bỏ hết các Control đi thì thứ còn lại chính là Window. Window sở hữu và mang theo tất cả những Control bên trong nó, khi nó được tắt đi, các Control cũng sẽ được tắt theo. Hãy tưởng tượng Window như 1 tớ giấy trắng, khi ta tạo ra các Control trên Windown tức là ta vẽ lên tờ giấy đó những thứ mà ta muốn.
  3. Khay Hệ Thống - Tray System: gọi tắt là Tray - Là phần mà mặc định luôn có khi làm ứng dụng với AutoIT, khi chạy 1 chương trình AutoIT chúng ta sẽ thấy 1 Icon nhỏ xuất hiện ở Dưới - Bên Phải, gần đồng hồ của Window tất cả những gì nằm bên trong Icon đó chính là Tray System.

- Nội dung bài này sẽ nói về cách tạo Window và các Control được lên danh sách bên dưới, những control còn lại và Tray System sẽ được đề cập đến trong 1 bài riêng vì chắc chắn rằng chúng cũng không ngắn đâu.
  1. Label - Dùng để hiển thị 1 chuỗi
  2. Button - Nút nhấn để thực hiện 1 việc gì đó
  3. Input - Nơi để người dùng nhập dữ liệu
  4. Edit - Giống như Input nhưng có nhiều dòng
  5. Checkbox và Radio - Tạo tùy chọn cho người dùng
  6. List - Tạo tùy chọn kiểu danh sách
  7. Combo - Tạo tùy chọn theo kiểu danh sách nhỏ gọn
  8. Tab - Tạo các thẻ, để hiện Control theo nhóm
  9. Menu - Tạo thanh Menu phía trên Window
- Mới kể cái tên thôi cũng đã thấy nhiều rồi và như đã nói tương ứng với mỗi cái tên ta sẽ có 1 Hàm Tạo cho chúng, ngoài những Hàm Tạo này ta còn 1 nhóm hàm khác gọi là Hàm Hiệu Chỉnh số lượng của chúng cũng không kém hơn các Hàm Tạo và chắc chắn rằng ta cũng khó mà dùng hết, thông qua các ví dụ về hàm tạo tớ sẽ giới thiệu những cái hay dùng để sao cho chúng ta tạo được cái GUI trước đã.



1. Cách tạo Window - Hàm GUICreate("title" , width, height, left, top)

- Chắc nhiều bạn cũng đã biết đến ứng dụng có tên là Koda và cũng biết rằng dùng nó rất dễ để tạo được 1 GUI. Nhưng mới học ta chưa nên dùng Koda vì dùng nó bạn sẽ chậm hiểu về AutoIT hơn, cũng như 1 đứa trẻ suốt ngày được bế trên tay sẽ chậm biết đi, hơn nữa học cách dùng Koda cũng không phải dễ. Chính vì vậy, sẽ có 1 bài riêng dành cho nó sau, trong bài này chúng ta sẽ tập trung vào cách tạo GUI bằng Code và bắt đầu với việc tạo Window trước vì đây là nền của tất cả các Control.

- Như đã biết Window được tạo ra bằng GUICreate(), hàm này có tất cả 8 biến cần được truyền vào, nhưng tớ chỉ nói đến 5 biến đầu tiên, 3 biến còn lại chúng ta sẽ không đụng đến vì chưa phải lúc, bỏ đi chương trình cũng không hề bị lỗi gì cả, với những hàm tạo Control cũng vậy tớ cũng chỉ nêu những biến quan trọng.
  1. Title: là tiêu đề của Window, nó chính là dòng chữ hiện trên cùng, thường nằm bên trái của nút Tắt Window.
  2. Width: tức là chiều rộng của Window khi khởi tạo.
  3. Height: chiều cao của Window khi khởi tạo.
  4. Left: tọa độ x của Window khi khởi tạo, tức là từ trái sang phải.
  5. Top: tọa độ y của Window khi khởi tạo, tức là từ trên xuống dưới.
GUI1.PNG

- Lưu ý rằng Height của Window không bao gồm chiều cao của Title Bar, tức là vùng màu xanh có nút X để tắt GUI. Đơn vị do lường được AutoIT sử dụng để tạo GUI là Pixel. Ví dụ như khi chúng ta muốn tạo ra 1 GUI có Window rộng 200 pixel, cao 250 pixel nằm tại vị trí 100x200 so với màn hình Desktop giống như hình ở trên thì ta code như sau:

 GUICreate ("72ls.NET" ,200 ,250 ,100 ,200)
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    msgbox (0 ,"72ls.net" ,"")     ;Tạm dùng để xem GUI

- Và Hàm Hiệu Chỉnh đầu tiên cần nói đến khi tạo GUI chính là GUISetState(), nhiệm vụ của nó là hiệu chỉnh Window, nếu sau khi dùng hàm GUICreate mà bạn không dùng hàm này thì GUI sẽ không hiện lên. Đương nhiên hàm này không đơn giản như vậy, nó còn có 2 tham số khác, nhưng chúng ta chẳng cần quan tâm đến làm gì, chỉ để y như trong Ví Dụ là được rồi.



2. Cách tạo Label - Hàm GUICtrlCreateLabel("text", left, top, width, height)

- Với Control thì cái đầu tiên cần hướng dẫn là Label vì nó đơn giản nhất trong các loại Control, nhiệm vụ của nó chỉ dùng để hiện 1 chuỗi ra, còn ứng dụng thì làm Tiêu Đề cho các Control khác hoặc để thông báo 1 trạng thái hoạt động nào đó của chương trình, ví dụ như hiện chữ "Pause" khi chương trình đang dừng, với Control Label này chúng ta cũng chỉ quan tâm đến 5 biến giống như trong hàm GUICreate() để tạo Window mà thôi.
  1. Text: cũng như tiêu đề của Window, nhưng nó là dòng chữ sẽ hiện ra trong Label.
  2. Width, Height: là chiều rộng và cao của Label, nếu bạn không truyền vào AutoIT sẽ tự canh cho đủ.
  3. Left,Top: khác với Width và height, nếu bạn kg truyền 2 thông số này vào AutoIT sẽ báo lỗi.
- Lưu ý rằng Left, Top trong các Control thường được truyền vào trước Width và Height, không như hàm GUICreate(). Ngoài ra Left, Top ở đây là tọa độ x, y của Control so với Window, còn Left, Top trong Window là của GUI so với Desktop. Tức là khi bạn muốn tạo 1 Label có kích thước là 43x16 tại vị trí 2x7 so với Window thì ta code như sau:

GUICreate ("72ls.NET" ,200 ,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 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI  

- Ở ví dụ trên còn 1 hàm khác ở dòng 4 là GUICtrlSetBkColor(-1,0xFF0000), hàm này chính là Hàm Hiệu Chỉnh cùng loại với GUISetState(), nếu để ý bạn sẽ thấy nó có thêm chữ Ctrl đây là viết tắt của từ Control và bất cứ hàm nào có chữ GUICtrl tức là nó ám chỉ rằng hàm này chỉ hiệu chỉnh các Control mà thôi, nếu chỉ có chữ GUI không thì nó hiệu chỉnh cho Window.

GUICtrlSetBkColor (controlID, backgroundcolor)

- Nói về chức năng của hàm GUICtrlSetBkColor() thì chắc các bạn cũng đã thấy rõ qua ví dụ, nó dùng để thay đổi màu nền của Control. Vấn đề còn lại là dùng thế nào, tức là truyền biến cho nó như thế nào. Nhìn lại các biến 1 lần bạn sẽ thấy cái đầu tiên là control ID tức là mã số của Control, có thể bạn không biết nó là gì... kệ không cần quan tâm, bạn chỉ cần biết rằng nếu để số -1 thì nó sẽ hiệu chỉnh màu cho Control vừa được tạo trước đó, như vậy là đủ xài. Còn biến thứ 2 là background color, đọc là hiểu liền màu nền, nó cũng là mã số của màu, trong ví dụ tớ để ở dạng số Hex (Hệ Thập Lục Phân - 16 số), nhưng nếu thích bạn cứ để đại 1 số Dec (Hệ Thập Phân - 10 Số) vào cũng được. Còn chuyện làm sao chọn được màu bạn muốn thì Colours CHooser v1.0 - Công cụ giúp chọn mã màu hoàn hảo xem nhé.



3. Tạo Button - Hàm GUICtrlCreateButton("text" , left, top, width, height)

- Về cái Button nó không khác gì cái Label, chúng nó giống nhau đến 99%, cái khác duy nhất là hình dạng, có thể nhiều bạn sẽ không đồng ý với mình vì Button là Button, Label là Label sao giống nhau được, trong các ngôn ngữ khác thì đúng là như vậy, nhưng với AutoIT thì tụi nó là thế. Một Label hoàn toàn có thể dùng để Click được không khác gì Button, còn Button nếu chỉnh lại hình hạng 1 tý thì có chã khác gì 1 Label.

- Các thông số của chúng cũng hệt nhau, Width và Height sẽ tự canh nếu không được truyền vào, không tin cứ xem và edit lại ví dụ bên dưới sẽ thấy.

GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,70 ,120 ,52) ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI



4. Tạo Input - Hàm GUICtrlCreateInput("text" , left , top , width , height)

- Nếu Button giống Label 99% thì 1 cái Input giống Label khoãng 90%. Chức năng của Input giống như hàm InputBox() nhưng là ở trên GUI và vì nó ở trên GUI cho nên cách ta lấy dữ liệu từ nó cũng khác, ở đây ta chỉ nói đến cách Tạo GUI còn chuyện Lấy Dữ Liệu từ GUI chúng ta sẽ học ở bài sau. - Tuy với Width và Height của Input AutoIT cũng tự canh nhưng tốt nhất ta nên truyền vào, để nó tự tung tự tát sau này thể nào cũng gay phiền phức, vì mỗi lần mở GUI có trời mới biết là nó có bị thay đổi kích thước hay không.

GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,70 ,120 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 



5. Tạo Edit - Hàm GUICtrlCreateEdit("text" , left , top , width , height)

- Nếu tiếp tục xét tỷ lệ thì thằng này cũng lại giống Input 99% và điểm khác biệt ở đây là Edit có nhiều dòng, tức là khi nhập liệu bạn có thể Enter để nhập trên dòng mới, còn Input thì Enter tới Tết nó cũng không xuống. - Tớ quên nói vụ biến text đầu tiên, với Edit và Input nếu không truyền biến này vào thì sẽ có lỗi, nhưng nếu truyền chuỗi rỗng vào như trong ví dụ thì tụi nó sẽ trắng bóc không có chữ nào.

GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,70 ,120 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 




6. Tạo CheckBox - Hàm GUICtrlCreateCheckbox("text" , left , top , width , height)

- Chức năng của CheckBox chắc ai cũng biết, tạo nó cũng chả khó gì, hệt như mấy thằng trên, thậm chí còn dễ hơn bạn chỉ cần cho nó tọa độ và cái text là xong, width với height khỏi rớ tới lun, vì AutoIT tự canh thằng này rất tốt không có trục trặc gì. Ở đây tớ xin nhắc lại, bài này chỉ học cách Tạo còn cách Lấy Dữ Liệu với Tương Tác trên Window và Control sẽ học ở bài sau.


GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,70 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 




GUI2.PNG


7. Tạo Radio - Hàm GUICtrlCreateRadio("text" , left , top , width , height)
- Nếu các CheckBox có thể được chọn cùng 1 lúc, thì các Radio chỉ có thể chọn 1 cái mà thôi, ngoài đặt điểm này ra Radio hoàn toàn giống với CheckBox.

 GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,70 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 

- Tới đây chúng ta vẫn chưa xong với Radio, vì trên GUI không phải lúc nào cũng chỉ có 1 nhóm Radio, tức là với 4 Radio người dùng có thể chọn 2 trong số đó (2 nhóm radio) và để làm được điều này ta cần thêm 1 hàm khác là GUICtrlCreateGroup(). Tuy không có trong Danh Sách Giới Thiệu, nhưng đây cũng là 1 Control và bản chất của nó là gì thì chúng ta khoan nói tới, giờ chỉ xem ví dụ để biết nó tách các Radio thành 2 nhóm như thế nào thôi rồi khi cần dùng ta cứ code y như vậy là được, không bao giờ sợ sai.

GUICreate ("72ls.NET" ,200 ,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 
    
    GUICtrlCreateButton ("Nhập" ,20 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI



8. Tạo List Control - Hàm GUICtrlCreateList("text" , left , top , width , height)

- Xét 1 cách sơ xài thì List có chức năng khá giống Radio, tức là ta chỉ chọn được 1 trong số nhiều cái có trong List. Nhưng với Radio mỗi tùy chọn là 1 Control riêng biệt, còn List Control thì chỉ có 1 và các tùy chọn là những chuỗi được xếp trên những dòng khác nhau, giờ chúng ta xem ví dụ xong ta sẽ nói tiếp về List nà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 
    
    GUICtrlCreateList ("Nhà Lầu" ,210 , 7 , 100 ,90)      ;Tạo List Control 
    GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay")        ;Thêm dữ liệu vào List Control 
    
    GUICtrlCreateButton ("Nhập" ,20 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI

- Trong ví dụ, List của chúng ta có tất cả 4 dòng, trong đó 3 dòng cuối là do hàm GUICtrlSetData() giữ, như thế rõ ràng hàm này đã thêm các chuỗi đó vào List rồi. Nhìn tên hàm thôi cũng có thể đoán được: Set Data=Hiệu Chỉnh Dữ Liệu, biến thứ 2 của hàm này xem như xong, không có gì khó hiểu, vì nó là dữ liệu ta cần thêm vào cho List, còn biến thứ nhất thì y hệt như hàm GUICtrlSetBkColor() trong phần tạo Label, với -1 ám chỉ Control vừa được tạo ra trước đó.

- Vậy túm lại hàm này không có gì mới sao? Thật ra là có, đó là dấu phân cách giữa các dòng [ | ], phòng trường hợp những bạn không biết gõ dấu này thế nào trên bàn phím tớ xin chỉ luôn, các bạn giữ Shift xong bấm dấu [ \ ], nó thường nằm gần phím Enter và dấu xóa lùi [ BACKSPACE ]. Ngoài ra tớ muốn nói thêm về chuỗi đầu tiền trong hàm GUICtrlCreateList() - "Nhà Lầu" nếu đây là chuỗi rỗng thì List Control sẽ không chọn dòng nào cả, nhưng nếu có thì đó sẽ làm tùy chọn mặc định của nó, chuỗi này không được phép trùng với 1 chuỗi trong hàm GUICtrlSetData(), nếu không nó sẽ bị lặp lại và List Control sẽ xem chúng như 2 Tùy Chọn Khác Nhau.



9. Tạo Combo - Hàm GUICtrlCreateCombo("text" , left , top , width , height)
- Thằng này nó tớ chỉ nói 1 câu: Y chang List Control và gọn nhẹ hơn nhiều



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 
    
    GUICtrlCreateList ("Nhà Lầu" ,210 , 7 , 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 
    
    GUICtrlCreateCombo ("Nhà Lầu" ,210 , 120 , 100 ,90)   ;Tạo ComboBox 
    GUICtrlSetData (-1 , "Xe Hơi|Hồ Bơi|Máy Bay")        ;Thêm dữ liệu vào ComboBox 
    
    GUICtrlCreateButton ("Nhập" ,20 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 



GUI3.PNG





 
10. Tạo Tab - Hàm GUICtrlCreateTab(left , top , width , height)

- Nếu đã từng tiếp xúc với Tab qua các ứng dụng, bạn sẽ thấy nó là tập hợp nhiều vùng chứa những Control khác nhau, được ẩn hiện mỗi khi ta click vào 1 Tab. Để làm được việc đó ta cần tạo ra Tab Nền trước bằng hàm GUICtrlCreateTab(), nhìn thông số hàm chác các bạn cũng biết phải làm gì rồi đúng không, nó dễ hơn các hàm trước vì không cần text.

- Sau khi đã có Tab Nền, bạn tiến hành tạo ra Tab thật sự bằng hàm GUICtrlCreateTabItem('Text'), cái này dễ nhất rồi khỏi nói lun. Sau khi có được Tab đầu tiên bạn phải tạo ngay những Control bên trong Tab này, xong đâu vào đó hết rồi bạn mới chuyển sang tạo Tab thứ 2 cùng những Control của nó và cứ như thế bạn muốn tạo ra bao nhiêu Tab cũng được.

- Ví dụ bên dưới tớ đã tạo sẵn 1 Tab Nền2 Tab Thật Sự, cái thứ nhất chứa List Control còn cái thứ 2 chưa Combo Box, bạn hãy run ví dụ rồi tạo lại cái mới sẽ hiểu ngay:

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 
    
    GUICtrlCreateButton ("Nhập" ,20 ,190 ,52)         ;Tạo nút có chữ Nhập 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI

- Ví dụ ở trên có 1 chỗ không ổn đó là nút Nhập, tuy trên giao diện nó không nằm trong vùng của Tab nhưng vẫn bị ảnh hưởng khi ta chuyển Tab, cụ thể hơn là nó bị ảnh hưởng bởi Tab Combo Box. Từ đó ta có thể suy ra, việc phân vùng các Tab không phải dựa vào diện tích của chúng mà dự vào thứ tự dòng lệnh mà bạn đã viết. Để khắc phục sự bất ổn này ta có 2 cách.

  1. Luôn tạo các Control không thuộc Tab trước và không để lệnh Tạo Control bên dưới lệnh tạo Tab, tức là mang dòng lệnh tạo nút Nhập ở ví dụ bỏ lên trên dòng lệnh tạo Tab Nền - GUICtrlCreateTab()
  2. Cách 1 hơi nhập nhằn đúng không. Ta còn 1 cách khác đơn giản hơn là để nguyên như vậy rồi thêm lệnh tạo 1 Tab Rỗng vào - Tham Số Text là chuỗi rỗng, AutoIT sẽ tự đóng Tab Nền lại để các Control được tạo bên dưới không bị ảnh hưởng. Hãy xem ví dụ :
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 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 
    




11. Tạo Menu - Hàm GUICtrlCreateMenu("text")

- Chỉ có 1 tham số, khỏi nói nhiều ghi đại chữ gì vô rồi chạy thử là xong, trong ví dụ tớ lấy tên là FileEdit, 2 Main Menu rất quen thuộc trong các ứng dụng.

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 
    
    GUICtrlCreateMenu ("File")                   ;Tạo Menu File 
    GUICtrlCreateMenu ("Edit")                   ;Tạo Menu Edit 
    
    GUISetState ()   ;Hàm để hiện GUI ra 
    
    MsgBox (0 ,"72ls.NET" ,"")             ;Tạm dùng để xem GUI 

- Trong các ứng dụng khi bấm vào Menu nó sẽ hiện ra thêm những Menu nhỏ khác phía dưới, chúng được gọi là Sub Menu, tức là Menu con. Vậy bước tiếp theo là làm sao tạo Sub Menu, hay nói khác hơn làm sao để gắn Sub Menu vào Main Menu cho đúng khi mà FileEdit không có gì để phân biệt. Các bạn hãy nhìn vào cấu trúc hàm tạo Sub Menu sẽ thấy ngay manh mối giải quyết vấn đề:

GUICtrlCreateMenuItem ("text" , menuID)

- Biến đầu tiên khỏi nói tới nhé, chỉ có cái menu ID, tức là mã số của Menu, đây chính là tham số dùng để gắn Sub Menu vào Main Menu, vậy làm sao lấy được menu ID ? Rất đơn giản, bạn hãy tạo 1 biến bất kỳ, xong dùng biến đó để nhận giá trị trả về từ hàm tạo Main Menu vậy là xong. Trong ví dụ, sau khi tạo và gắn Sub Menu vào Main Menu File tớ đã xuất mã số của nó ra MsgBox() để các bạn xem cho biết, trong thực tế ta cũng chã cần quan tâm nó là số mấy làm gì.

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 
    
    MsgBox (0 ,"72ls.NET" ,"Mã số Main Menu File: " &$File)             ;Tạm dùng để xem GUI 
    

- Tạo Menu tới đây thì coi như xong, nếu bạn muốn tạo thêm Sub Menu cho Edit thì cứ đặt cho nó 1 biến, xong cũng làm tương tự với File. Tớ chỉ muốn nói thêm về dòng lệnh 40, biến Text của hàm này là 1 chuỗi Rỗng, để như thế sẽ tạo ra 1 dòng phân cách giữa các Sub Menu, đây cũng là đặt điểm thường thấy của những Menu dài.

GUI4.PNG



Nguồn : 72ls.net