AutoIT tut 22 : GuiCtrlCreate

0
0
(0)

GUICtrlCreateList

Hàm này sẽ giúp bạn tạo ra một cái danh sách để chứa thông tin. Danh sách là một dạng dữ liệu rất hay gặp trong đời thường và trên máy tính (ở các chương trình nghe nhạc và quản lý). Tuy nhiên, ở đây AutoIt chỉ hỗ trợ bạn tạo ra một danh sách với các tính năng đơn giản, thông dụng. Danh sách này chỉ có một cột nhưng lại có nhiều dòng. Nếu bạn cần một danh sách có nhiều cột và nhiều dòng thì hãy dùng ListView , ở đây tôi không đề cập đến phần này. Cú pháp cho bạn tạo một Listbox như sau :

GUICtrlCreateList ( “text”, left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

Text Văn bản sẽ hiển thị trong List box
leftKhoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
TopKhoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
width[tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó
height[tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước đó.
style[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles Appendix.
default ( -1) : $LBS_SORT, $WS_BORDER, $WS_VSCROLL
style bắt buộc : $WS_TABSTOP, $LBS_NOTIFY
exStyle[tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th. Công : Trả về ID của listbox vừa tạo
Hỏng : Trả về 0

Chú ý

Ø       Để đọc các giá trị của listbox , xem hàm GUICtrlRead

Ø       Để thiết lập hoặc thay đổi thông tin , xem hàm GUICtrlSet….

Ø       Nhiều mục-nhập (entry) khác nhau trong danh sách có thể được chọn , được thiết lập với GUICtrlSetData

Ø       Để giới hạn mức cuộn (srolling) theo chiều ngang , dùng hàm GUICtrlSetLimit

Ø       Để kết hợp style mặc định với các style khác , gọi  BitOr($GUI_SS_DEFAULT_LIST, newstyle,…).

Ø       Để sử dụng được các giá trị nêu trên , cần gọi thư viện  :  #include <ListBoxConstants.au3>

Ø       Đưa về kích thước mặc định (size và vị trí) : $GUI_DOCKAUTO

Ví dụ

#include <GUIConstantsEx.au3>

Opt(‘MustDeclareVars’, 1)

Example()

Func Example()

      Local $MESSAGE = “The following buttons have been clicked”

      Local $add, $clear, $mylist, $close, $msg

      GUICreate(“My GUI list”) ; will create a dialog box that when displayed is centered

      $add = GUICtrlCreateButton(“Add”, 64, 32, 75, 25)

      $clear = GUICtrlCreateButton(“Clear”, 64, 72, 75, 25)

      $mylist = GUICtrlCreateList(“buttons that have been clicked”, 176, 32, 121, 97)

      GUICtrlSetLimit(-1, 200)      ; to limit horizontal scrolling

      GUICtrlSetData(-1, $MESSAGE)

      $close = GUICtrlCreateButton(“my closing button”, 64, 160, 175, 25)

      GUISetState()

      $msg = 0

      While $msg <> $GUI_EVENT_CLOSE

            $msg = GUIGetMsg()

            Select

                  Case $msg = $add

                        GUICtrlSetData($mylist, “You clicked button No1|”)

                  Case $msg = $clear

                        GUICtrlSetData($mylist, “”)

                  Case $msg = $close

                        MsgBox(0, “”, “the closing button has been clicked”, 2)

                        Exit

            EndSelect

      WEnd

EndFunc   ;==>Example

GUICtrlCreateListView

ListView cũng chính là một danh sách (Listbox) nhưng nó có nhiều dòng và nhiều cột , tạo thành một ma trận. Listview mà bạn thường thấy là trong Windows Explorer , khi bạn duyệt file với chế độ View là Detail.

GUICtrlCreateListView ( “text”, left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

textVăn bản này sẽ là tiêu đề của các cột trong listview. Mỗi tiêu đề sẽ được ngăn cách với ký tự được chỉ định trong  Opt(“GUIDataSeparatorChar”).
leftKhoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
TopKhoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
width[tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó
height[tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước đó.
style[tùy chọn] định nghĩa style cho control. Xem GUI Control Styles Appendix.

default (-1) : $LVS_SHOWSELALWAYS, $LVS_SINGLESEL
style bắt buộc : $LVS_REPORT
exStyle[tùy chọn] định nghĩa style mở rộng cho control. Xem  Extended Style Table hoặc ListView Extended Style Table.

Giá trị trả về

Th. Công : Trả về ID của listview vừa được tạo
Hỏng : Trả về 0

Chú ý

Ø       Để thêm các mục vào Listview , sử dụng hàm GUICtrlCreateListViewItem

Ø       ListView sẽ xuất hiện mặc định như trong windows explorer với view là Detail (LVS_REPORT là bắt buộc).
Bạn có thể khởi tạo kích thước cho một cột bằng cách nối thêm các khoảng trắng vào tiêu đề của cột. Cột có thể được mở rộng theo chiều dài của mục-(item)-được-thêm-vào bởi GUICtrlCreateListViewItem. Kích thước của một cột sẽ lên đến 25 ký tự.  Nhưng sẽ không có một sự resize được diễn ra khi bạn cập nhật nội dung ListView bằng GuiCtrlSetData.

Ø       Để tạo một ListView với icon, icon nhỏ hoặc chỉ là một kiểu List , sau khi tạo bạn gọi hàm GUICtrlSetStyle với các style :  $LVS_ICON, $LVS_SMALLICON hoặc $LVS_LIST.

Ø       Chức năng sắp xếp các mục trong ListView bằng cách nhấp vào tiêu đề của cột (như trong Explorer) thì không có tác dụng.

Ø       Khi bạn chọn một mục trong ListView, bạn muốn toàn bộ dòng đó được phát sáng thay vì chỉ có ở một cột thì hãy gọi style mở rộng  $LVS_EX_FULLROWSELECT.

Ø       Để kết hợp style mặc định với style khác , bạn gọi  BitOr($GUI_SS_DEFAULT_LISTVIEW, newstyle,…).

Ø       Thư viện cần thiết cho các tham số nêu ở trên là  : #include <ListViewConstants.au3>

Ø       $GUI_BKCOLOR_LV_ALTERNATE  là một cờ đặc biệt , có thể dùng với Listview để làm cho màu nền giữa các dòng có thể xen kẽ nhau.

–  Dòng chẵn sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của control ListView

–  Dòng lẻ sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của control ListViewItem

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

 

Opt('MustDeclareVars', 1)

Example()

 

Func Example()

      Local $listview, $button, $item1, $item2, $item3, $input1, $msg

     

      GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)

      GUISetBkColor(0x00E0FFFF)  ; will change background color

 

      $listview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)

      $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)

      $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)

      $item2 = GUICtrlCreateListViewItem("item1|col12|col13", $listview)

      $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)

      $input1 = GUICtrlCreateInput("", 20, 200, 150)

      GUICtrlSetState(-1, $GUI_DROPACCEPTED)   ; to allow drag and dropping

      GUISetState()

      GUICtrlSetData($item2, "ITEM1")

      GUICtrlSetData($item3, "||COL33")

      GUICtrlDelete($item1)

 

      Do

            $msg = GUIGetMsg()

            Select

                  Case $msg = $button

                        MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)

                  Case $msg = $listview

                        MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)

            EndSelect

      Until $msg = $GUI_EVENT_CLOSE

EndFunc   ;==>Example

GUICtrlCreateListViewItem

Tạo ra một mục (item) mới để thêm vào trong ListView.

GUICtrlCreateListViewItem ( “text”, listviewID )

Các tham số

TextVăn bản của các mục (item) phụ, mỗi mục  được ngăn cách với Opt(“GUIDataSeparatorChar”).
listviewIDĐịnh danh (ID) của control ListView mà bạn muốn thêm item vào

Giá trị trả về

Th. Công : Định danh (ID) của mục vừa được tạo
Failure: Trả về 0

Chú ý

Ø       Hàm này tạo ra những mục (item) Listview đặc biệt, chúng có thể được chọn, có tính năng như những control bình thường và có thể được thiết lập với GUICtrlSetData.

Ø       Các item này có thể được xóa bỏ như các control khác khi gọi hàm GUICtrlDelete

Ø       Những mục trong Listview có thể được kéo thả vào trong một control Edit hay Input , khi được thiết lập trạng thái (state) $GUI_DROPACCEPTED.

Ø       Xem hàm GUICtrlCreateListView về việc resize lại kích thước của các cột.

Ø       $GUI_BKCOLOR_LV_ALTERNATE  là một cờ đặc biệt , có thể dùng với Listview để làm cho màu nền giữa các dòng có thể xen kẽ nhau.

–  Dòng chẵn sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của control ListView

–  Dòng lẻ sẽ lấy màu được thiết lập bởi hàm GUICtrlSetBkColor của control ListViewItem

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

 

Opt('MustDeclareVars', 1)

Example()

 

Func Example()

      Local $listview, $button, $item1, $item2, $item3, $input1, $msg

     

      GUICreate("listview items", 220, 250, 100, 200, -1, $WS_EX_ACCEPTFILES)

      GUISetBkColor(0x00E0FFFF)  ; will change background color

 

      $listview = GUICtrlCreateListView("col1  |col2|col3  ", 10, 10, 200, 150);,$LVS_SORTDESCENDING)

      $button = GUICtrlCreateButton("Value?", 75, 170, 70, 20)

      $item1 = GUICtrlCreateListViewItem("item2|col22|col23", $listview)

      $item2 = GUICtrlCreateListViewItem("............item1|col12|col13", $listview)

      $item3 = GUICtrlCreateListViewItem("item3|col32|col33", $listview)

      $input1 = GUICtrlCreateInput("", 20, 200, 150)

      GUICtrlSetState(-1, $GUI_DROPACCEPTED)   ; to allow drag and dropping

      GUISetState()

      GUICtrlSetData($item2, "|ITEM1")

      GUICtrlSetData($item3, "||COL33")

      GUICtrlDelete($item1)

 

      Do

            $msg = GUIGetMsg()

            Select

                  Case $msg = $button

                        MsgBox(0, "listview item", GUICtrlRead(GUICtrlRead($listview)), 2)

                  Case $msg = $listview

                        MsgBox(0, "listview", "clicked=" & GUICtrlGetState($listview), 2)

            EndSelect

      Until $msg = $GUI_EVENT_CLOSE

EndFunc   ;==>Example

GUICtrlCreatePic

Hàm này sẽ tạo ra một control cho phép nạp và hiển thị hình ảnh (picture) trên GUI.

GUICtrlCreatePic ( filename, left, top [, width [, height [, style [, exStyle]]]] )

Các tham số

FilenameĐường dẫn và tên đầy đủ file ảnh cần load. Hỗ trợ ảnh BMP, JPG và GIF (không có hình động)
leftKhoảng cách canh từ lề trái của GUI (tọa độ x). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
TopKhoảng cách canh từ lề trên của GUI (tọa độ y). Nếu sử dụng -1, thì lề trái được tính theo GUICoordMode.
width[tùy chọn] độ rộng của control. Mặc định là độ rộng đã dùng trước đó
height[tùy chọn] chiều cao của control. Mặc định là chiều cao đã dùng trước đó.
Style[Tùy chọn] Định nghĩa style cho control. Xem GUI Control Styles Appendix.
default (-1) : $SS_NOTIFY
style bắt buộc : $SS_BITMAP
exStyle[tùy chọn] Định nghĩa style mở rộng. Xem Extended Style Table.

Giá trị trả về

Th. Công : Trả về ID của control picture vừa được tạo
Hỏng : Trả về 0 nếu ảnh không tạo được ảnh

Chú ý

Ø       Để thiết lập hoặc thay đổi thông tin picture, xem hàm GUICtrlSet….

Ø       Để cập nhật ảnh sau khi hộp thoại đã được hiển thị , sử dụng hàm GUICtrlSetImage

Ø       Nếu bạn muốn ảnh hiển thị với kích thước gốc của nó , gán width = heigh = 0

Ø       Nếu bạn muốn có một ảnh trong suốt , bạn cần tạo GUI với style mở rộng  $WS_LAYERED. Điểm ảnh left-top (góc trái trên) sẽ được dùng làm màu trong suốt.  Khi  có nhiều ảnh được tạo , thì ảnh cuối cùng được định nghĩa màu trong suốt. Xem example 2.

Ø       .Để kết hợp style mặc định với style khác , sử dụng BitOr($GUI_SS_DEFAULT_PIC, newstyle,…).

Ø       Để sử dụng được các giá trị nêu trên , gọi thư viện  #include <StaticConstants.au3>

Ø       Đưa về kích thước mặc định : $GUI_DOCKSIZE.

Ø       Nếu một ảnh được thiết lập làm ảnh trong suốt , các control khác sẽ bị phủ lấp , điều quan trọng là phải vô hiệu control pic và tạo nó sau khi bạn đã tạo các control khác : GUICtrlSetState(-1, $GUI_DISABLE). Chỉ điều này thôi thì chưa đủ cho control Tab và ListView vì chúng sẽ hoạt động hơi khác thường. Trong trường hợp này bạn cần tạo ảnh với style $WS_CLIPSIBLINGS , GuiCtrlSetState(-1,$GUI_ONTOP) là cần thiết cho control Tab và ListView.

Ø       Style mở rộng $GUI_WS_EX_PARENTDRAG cho phép bạn nắm và kéo những cửa sổ con không có thanh tiêu đề.

Ø       Nền thì luôn được làm cho trong suốt. GUICtrlSetBkColor( ) thì không có tác dụng đối với control picture.

Ø       PNG có thể được dùng với GDI+. Xem example 3.

Ví dụ

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

 

Opt('MustDeclareVars', 1)

Global $gui, $guiPos, $pic, $picPos

 

Example1()

Example2()

 

;-----example 1 ----

Func Example1()

    Local $n, $msg

   

    GUICreate("My GUI picture", 350, 300, -1, -1, $WS_SIZEBOX + $WS_SYSMENU)  ; will create a dialog box that when displayed is centered

 

    GUISetBkColor(0xE0FFFF)

    $n = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 50, 50, 200, 50)

 

    GUISetState()

 

    ; Run the GUI until the dialog is closed

    While 1

        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop

    WEnd

 

 

;~GUISetState ()

    ; resize the control

    $n = GUICtrlSetPos($n, 50, 50, 200, 100)

    ; Run the GUI until the dialog is closed

    While 1

        $msg = GUIGetMsg()

        If $msg = $GUI_EVENT_CLOSE Then ExitLoop

    WEnd

   

    GUIDelete()

EndFunc   ;==>Example1

 

;-----example 2

Func Example2()

    Local $msg

   

    $gui = GUICreate("test transparentpic", 200, 100,-1 )

    $pic = GUICreate("", 68, 71, 10, 10, $WS_POPUP, BitOR($WS_EX_LAYERED, $WS_EX_MDICHILD), $gui)

    GUICtrlCreatePic(@SystemDir & "\oobe\images\merlin.gif", 0, 0, 0, 0,-1,$GUI_WS_EX_PARENTDRAG )

GUISetState(@SW_SHOW, $gui)

GUISetState(@SW_SHOW, $pic)

 

 

    HotKeySet("{ESC}", "main")

    HotKeySet("{LEFT}", "left")

    HotKeySet("{RIGHT}", "right")

    HotKeySet("{DOWN}", "down")

    HotKeySet("{UP}", "up")

    $picPos = WinGetPos($pic)

    $guiPos = WinGetPos($gui)

 

    Do

        $msg = GUIGetMsg()

    Until $msg = $GUI_EVENT_CLOSE

EndFunc   ;==>Example2

 

Func main()

    $guiPos = WinGetPos($gui)

    WinMove($gui, "", $guiPos[0] + 10, $guiPos[1] + 10)

EndFunc   ;==>main

 

Func left()

    $picPos = WinGetPos($pic)

    WinMove($pic, "", $picPos[0] - 10, $picPos[1])

EndFunc   ;==>left

 

Func right()

    $picPos = WinGetPos($pic)

    WinMove($pic, "", $picPos[0] + 10, $picPos[1])

EndFunc   ;==>right

 

Func down()

    $picPos = WinGetPos($pic)

    WinMove($pic, "", $picPos[0], $picPos[1] + 10)

EndFunc   ;==>down

 

Func up()

    $picPos = WinGetPos($pic)

    WinMove($pic, "", $picPos[0], $picPos[1] - 10)

EndFunc   ;==>up

 

;-----example 3 PNG work araund by Zedna

#include <GUIConstantsEx.au3>

#include <WindowsConstants.au3>

#include <GDIPlus.au3>

#Include <WinAPI.au3>

 

Global $hGUI, $hImage, $hGraphic, $hImage1

 

; Create GUI

$hGUI = GUICreate("Show PNG", 350, 301)

 

; Load PNG image

_GDIPlus_StartUp()

$hImage   = _GDIPlus_ImageLoadFromFile("E:\WINDOWS\system32\oobe\images\thanks8.png")

$hGraphic = _GDIPlus_GraphicsCreateFromHWND($hGUI)

 

GUIRegisterMsg($WM_PAINT, "MY_WM_PAINT")

GUISetState()

 

; Loop until user exits

do

untilGUIGetMsg() = $GUI_EVENT_CLOSE

 

; Clean up resources

_GDIPlus_GraphicsDispose($hGraphic)

_GDIPlus_ImageDispose($hImage)

_GDIPlus_ShutDown()

 

; Draw PNG image

Func MY_WM_PAINT($hWnd, $Msg, $wParam, $lParam)

    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_UPDATENOW)

    _GDIPlus_GraphicsDrawImage($hGraphic, $hImage, 0, 0)

    _WinAPI_RedrawWindow($hGUI, 0, 0, $RDW_VALIDATE)

    Return $GUI_RUNDEFMSG

EndFunc

 

How useful was this post?

Click on a star to rate it!

Average rating 0 / 5. Vote count: 0

No votes so far! Be the first to rate this post.

Leave A Reply

Your email address will not be published.