網頁標題: autoit-gui
 
﹗﹗﹗觀看留言:此文章已經有1則留言 ﹗﹗﹗


目前我在學習 autoit 的 gui 部分,感覺比較有自由發揮的空間,貼一則介紹與大家分享。

AutoIt 腳本可創建(由窗口及其控件組成的)簡單的圖形用戶界面(GUI)。
-
GUI 的概念
GUI 可由一個或多個 窗口 組成,這些窗口又帶有一個或多個控件。GUI是靠「事件驅動」實現與用戶的交互的,比如像點擊按鈕這樣的動作就會引發一個事件。程序在空閒狀態時等待事件的發生,捕捉到事件時則根據事件執行相關操作。您可以猜想自己在門邊等郵差(一直坐在那兒直到有信被送進來為止),等郵差把信送來了,您就要閱讀該信並決定下一步做什麼,這就跟GUI的原理一樣了:您等待的是郵差,而GUI則等待事件,

當然,在GUI(指程序的界面)運行時您也可以選擇要做的其它任務,比如使用GUI函數創建一個自動更新的動態的進度條,同時還可執行其它複雜的任務。


GUI 的控件
所有用戶應該都對控件非常瞭解了,在窗口上能被點擊或進行其它交互的部分都是控件的一種。AutoIt 可創建的控件類型有如下幾種(您肯定已在其它Windows程序中見過它們了):

Label
純文字控件
Button
按鈕
Input
單行編輯框,可供輸入文字
Edit
多行編輯框,可供輸入文字
Checkbox
方框按鈕,可被選中或取消選中
Radio
圓形按鈕(通常幾個一組,每次只能激活/選中其中一個)
Combo
組合框,帶有下拉列表
List
列表框
Date
日期選擇
Pic
圖片
Icon
圖標
Progress
進度條
Tab
標籤,每個標器都可包含一組控件
UpDown
可附加到輸入型控件上
Avi
顯示 AVI 格式的剪輯
Menu
位於窗口頂部的菜單
ContextMenu
當在窗口上點擊右鍵時出現的菜單
TreeView
類似於Windows的資源管理器(樹型視圖)
Slider
類似於Windows的音量控件(滑動條)
ListView
按列顯示信息的控件(列表視圖)
ListViewItem
ListView控件的項目
Dummy
虛擬的用戶控件


下面是一個單窗口的GUI示例,它包含了許多被AutoIt支持的控件。從中我們可以看到 AutoIt 確實可以創建內容非常豐富的GUI!





使用 GUICtrlCreate... 等函數即可創建控件。在創建時函數會返回 控件ID。關於控件ID有幾個注意事項:


控件ID是一個正數(意即該數大於0)
每個控件ID都具有唯一性(即使有多個窗口存在)。
控件ID可通過 AutoIt Window Info 獲得。

GUI 基本函數
下面這些就是可用於創建GUI的函數。但這些都是比較初級的應用,如果您已經準備好創建更高級的GUI,則還有其它高級的函數。

函數 解釋
GUICreate 創建一個窗口。
GUICtrlCreate... 創建各種控件。
GUISetState 顯示或隱藏窗口。
GUIGetMsg 通知GUI檢測是否有事件發生(僅用於消息循環)。
GUICtrlRead 讀取控件數據。
GUICtrlSetData 設置/更改 控件的數據。
GUICtrlSet... 對控件進行各種屬性設置(顏色、風格等等)。


在您著手編寫任何GUI腳本之前別忘了先包含文件 GUIConstants.au3 到腳本開頭位置(該文件包含了在編寫GUI程序時要用到的所有變量和常量)。


讓我們先來創建一個窗口吧,把它命名為「您好」,設置其長寬分別為200和100個像素。當窗口被創建時它是被隱藏的,所以我們還要先把它給「show(顯示)」出來。

#include
GUICreate("您好", 200, 100)
GUISetState(@SW_SHOW)
Sleep(2000)


如果運行上面的腳本您會看到出現一個窗口並在兩秒後消失。看來還不是很有意思哦...那讓我們嘗試增加一些文字和一個確定按鈕到窗口上吧!我們把文字加到 30, 10 這個位置並把按鈕放到 70, 50 這個位置,按鈕寬度設為60個像素。

#include
GUICreate("您好", 200, 100)
GUICtrlCreateLabel("最近過得怎樣?", 30, 10)
GUICtrlCreateButton("還OK吧", 70, 50, 60)
GUISetState(@SW_SHOW)
Sleep(2000)


好,現在看來還不錯。但是怎樣使這個GUI能響應我們點擊按鈕的事件呢?這時我們必須先決定究竟如何處理事件:要麼通過 消息循環(MessageLoop) 要麼通過 OnEvent 函數。


GUI 事件模式
正如上面所提到的那樣,我們有兩種基本的GUI模式:消息循環(MessageLoop)模式和 OnEvent 模式。這兩種模式是響應GUI事件的不同的實現方式。具體選擇哪一種模式主要看您的 個人喜好 或者您想要創建的GUI類型。這兩種模式都能用於創建任何您想要的GUI,只不過某些時候使用其中一個會比另外一個要好用些。

消息循環是默認的模式。若要切換為 OnEvent 模式請使用 Opt("GUIOnEventMode", 1) 語句。



消息循環模式(默認)

在消息循環模式下,腳本大部分時間都在執行一個週期非常短的循環,這個循環通知GUI使用 GUIGetMsg (截獲消息)函數。當某個事件發生時 GUIGetMsg 函數把消息作為返回數值返回(比如某個按鈕被按下、GUI被關閉,等等)。

在此模式下,只有當我們頻繁地使用 GUIGetMsg 函數時才有可能接收到事件,因此您必須確保在每一秒內都有數次調用該函數,否則您的 GUI 將無法響應事件。

這一模式最適合用於那些以 GUI 為重點的腳本中,並且您最關心的就是等待用戶事件。




OnEvent 模式

在OnEvent模式下,腳本並不需要頻繁地要求GUI檢查是否有任何事件發生(並根據返回信息處理事件),而是僅當某個事件發生時GUI才臨時性暫停腳本並調用一個用戶預定義的函數來處理該事件。例如,假定用戶點擊了按鈕1則GUI將暫停主腳本並調用某個預定義的用戶函數來處理按鈕1事件。當該函數完成處理操作後才回到主腳本繼續執行。這個模式比較類似 Visual Basic 的窗體方法。

這一模式最適合用於那些 GUI 處於第二重要地位的腳本中,並且您的腳本需要優先執行其它任務。



-




本文張貼者:謝福恩〔張貼時間:民國101年11月24日(星期六)15點17分〕

部落格首頁


學習的故鄉首頁
本站公告:〔您越需要我們,我們就越有創意〕 本站說明書:〔發現故鄉還有改進的地方,請來信告訴原丁們〕
觀察應用學習點數 :〔咱的故鄉有您的參與,會使我們有更大的發揮空間,展現更豐富精彩的學習畫面〕 〔期待藉由無障礙網頁設計,能讓視障小朋友更愛看書、更愛寫作且更愛學習〕:盲用電腦「心得分享」
〔為了讓我們有乾淨的學習環境,請勿任意在本站散播商業廣告與不合法文件或聯結〕:本站宣示