GUI設計與制作入門
本人學習AutoIt還不到一年,可以說是新手,但在學習過程中得到眾多AutoIt愛好者(konan、del888、COCO等)的大力幫助和有益啟發。下文的編寫純屬個人理解,深入學習還得看原文幫助文件。
AutoIt發展至今(已到V3.10版),在GUI(圖形界面)方面有不同程度的改進和提高。從目前函數語句增加情況看,設計一些比較復雜的應用程序應當說是不成問題的。我預測隨着AutoIt版本進一步提高,GUI的設計功能將大大增強,到時GUI設計的編寫器就如同VB6圖形設計編寫器一定能為我們設計程序應用提供極大的方便。
AutoIt中的GUI是我們設計AutoIt可視應用程序的重要組成部分,也是基礎部分。下面,我將從窗口的設計講起。
(一)窗口的設計
在GUI設計中,窗口的設計是最基本的。窗口一般由窗口名、窗口外形、窗口背景顏色和按鈕等組成。
1、窗口設計的完整原文語句。GUICreate ( "title" [, width [, height [, left [, top [, style [, exStyle [, parent]]]]]]] )
窗口的基本語句是:
GUICreate("窗口的設計", 200, 100)
在窗口的基本語句中:“窗口的設計”就是窗口文件名;“200”就是窗口的寬;“100”就是窗口的高。下面請看例子:
2、簡單窗口的腳本(紅色部分)與注解。
#include :#include <外部腳本名稱>
#include指包括所需的常量和變量。寫任何GUI腳本都必須在腳本最前面寫入 #include 語句。
GUICreate("我的窗口")
默認時可不用標明寬與高,默認值一般是400與400。窗口的寬與高也可以使用變量來設計。如:$width=500, $height=500。
例子如下:
$width=500
$height=500
GuiCreate("我的窗口",$width,$height,(@DesktopWidth-$width)/2, (@DesktopHeight-$height)/2)
注解:(@DesktopWidth-$width)/2為屏幕左邊到窗口的距離;(@DesktopHeight-$height)/2為屏幕頂部到窗口的距離。屏幕寬與高是與顯示器的分辯率一致的。另外還有風格函數可以繼續往后加入,但意義不是很大。對於初學者建議用簡單的方法。如GuiCreate("我的窗口",200,100)。要注意的是,窗口寬與高的值不要大於顯示器的分辯率值。
GUISetState (@SW_SHOW)
顯示窗口。如果@SW_SHOW改為@SW_HIDE則窗口隱藏。詳情見幫助文件:GUISetState項中的參數。也可什么都不加,默認值是顯示窗口。即:GUISetState ()。
下面是運行對話框直至窗口關閉的循環語句。
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
如圖:
[attach]1154[/attach]
下面是寬與高為200和100的窗口圖片
[attach]1155[/attach]
由此可見,GUI設計窗口並非那么復雜,只要設置好幾個關鍵值就可以了。
3、窗口背景色彩的設計。
窗口背景色彩設計主要運用下列語句來解決。
背景色彩設計完整原文語句是:GUISetBkColor ( background [, winhandle] )
用法:GUISetBkColor語句必須緊跟GUICreate語句。括號里的參數可自行設定。實例:
#include
GUICreate ("My GUI")
GUISetBkColor (0xE0FFFF) ; 設置自己喜歡的色彩
GUISetState ()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
[attach]1156[/attach]
在GUISetBkColor (0xE0FFFF)語句中“0xE0FFFF”是色彩值;“E0FFFF”色彩代碼。改變色彩只要改變代碼即可。上圖中的色彩代碼分別是“E0FFFF”和“FF0033”。
4、窗口按鈕的設計。
設計按鈕是為了達到控制與應用的目的。設計按鈕的完整語句是:
GUICtrlCreateButton ( "text", left, top [, width [, height [, style [, exStyle]]]] )
可以看出按鈕語句是由“按鈕名、按鈕與窗口左邊距、按鈕與窗口頂邊距、按鈕形狀的寬、按鈕形狀的高、按鈕的外形風格”等組成。
下面是按鈕不同參數的圖形:
[attach]1157[/attach] [attach]1158[/attach]
左圖的按鈕語句是:
GUICtrlCreateButton ("OK", 10, 30, 50)
GUICtrlCreateButton ( "Cancel", 60, 30, 50)
右圖的按鈕語句是:
GUICtrlCreateButton ("OK", 10, 30, 50)
GUICtrlCreateButton ( "Cancel", 10, 60, 50)
從以上兩組按鈕語句看,要比原文按鈕語句簡單的多,這也是GUI易學的奧妙。當然,復雜的語句也是可以掌握好的。如按鈕與圖標疊加的設計,只要加上相應的語句即可。完整腳本如下:
#include
GUICreate ("我的圖標按鈕",400,200)
GUISetBkColor (0xE0FFFF) ; 設置自己喜歡的色彩
GUICtrlCreateButton ("我的圖標按鈕", 10,20,40,40, $BS_ICON)
GUICtrlSetImage (-1, "shell32.dll",43)
GUICtrlCreateButton ("我的圖標按鈕", 80,20,40,40, $BS_ICON)
GUICtrlSetImage (-1, "shell32.dll",31)
GUICtrlCreateButton ("我的圖標按鈕", 150,20,40,40, $BS_ICON)
GUICtrlSetImage (-1, "shell32.dll",22)
GUISetState ()
While 1
$msg = GUIGetMsg()
If $msg = $GUI_EVENT_CLOSE Then ExitLoop
Wend
腳本窗口圖形如下圖
[attach]1159[/attach]
當然,按鈕還可以疊加圖片等,只要設置好函數語句就可以了。設置的方法是在GUICtrlCreateButton ("我的圖標按鈕", 10,20,40,40, $BS_ICON)語句中,改變$BS_ICON即可。詳情見幫助文件:GUI Control Styles項中的Push Button Styles參數。以上僅僅是把按鈕設計出來了,但真正要起作用還需要修改和增加語句。關於按鈕的控制與應用將在第二講中詳細解答。
p處理 2008-5-3 17:09
二)按鈕的控制與應用
按鈕的控制與應用主要是用來完成一項任務或控制某一個部件的動作。
1、控制的基本方法。一般按鈕使用變量來設計與控制。即:
$OK = GUICtrlCreateButton ("按鈕OK", 10,20,80,40)
$Cancel = GUICtrlCreateButton ("按鈕Cancel", 150,20,80,40)
按鈕的控制語句應放在循環判斷語句當中。即:在下列循環判斷語句當中"..."中加入控制語句。
While 1
$msg = GUIGetMsg()
...
WEnd
示例腳本如下:
#include
GUICreate ("我的圖標按鈕",400,200)
GUISetBkColor (0xE0FFFF) ; 設置自己喜歡的色彩
$OK = GUICtrlCreateButton ("按鈕OK", 10,20,80,40)
$Cancel = GUICtrlCreateButton ("按鈕Cancel", 150,20,80,40)
GUISetState(@SW_SHOW)
While 1
$msg = GUIGetMsg()
Select
Case $msg = $ok
MsgBox(0, "按鈕的控制", "控制成功!")
Case $msg = $GUI_EVENT_CLOSE or $msg = $Cancel
MsgBox(0, "按鈕的控制", "控制結束! 按確定或關閉窗口將自動退出程序...!")
ExitLoop
EndSelect
WEnd
2、循環判斷的設置。一般循環判斷語句在While...Wend中通常用以下兩種語句。即:Select...Case...EndSelect與If Then(或If...ElseIf...Else...EndIf)(詳見幫助文件)。兩種判斷語句示例腳本:
第一種:
While 1
$msg = GUIGetMsg()
Select
Case $msg = $ok1
MsgBox(0, "按鈕的控制1", "控制1!")
Case $msg = $ok2
MsgBox(0, "按鈕的控制", "控制2!")
Case $msg = $ok3
MsgBox(0, "按鈕的控制", "控制3!")
Case $msg = $ok4
MsgBox(0, "按鈕的控制", "控制4!")
...
Case $msg = $GUI_EVENT_CLOSE or $msg = $Cancel
MsgBox(0, "按鈕的控制", "控制結束! ")
ExitLoop
EndSelect
WEnd
這一種判斷語句可以設置無限的按鈕,只要你的窗口能放下無限的按鈕。每一個Case只能控制或完成一項任務,也就是一事一辦。當然在Case里面還可以增加下一級或更多級的判斷。如增加If Then語句,也可以增加Select...Case...EndSelect語句(這種情況較為復雜,新手不宜)。
第二種:
While 1
$msg = GUIGetMsg()
if $msg = $exit Then
MsgBox(0, "退出", "退出控制嗎!")
Exit
EndIf
if $msg = $ok1 Then
$Box = MsgBox(0, "按鈕的控制1", "控制1!")
if $Box = 1 Then RUN("Setup1.exe")
Exit
EndIf
if $msg = $ok2 Then
$Box2 = MsgBox(0, "按鈕的控制2", "控制2!")
if $Box2 = 1 Then RUN("Setup2.exe")
Exit
EndIf
if $msg = $ok3 Then
$Box3 = MsgBox(0, "按鈕的控制3", "控制3!")
if $Box3 = 1 Then
RUN("Setup3.exe")
EndIf
EndIf
...
WEnd
從示例看,這一種判斷語句也同樣可以設置無限的按鈕,只要你的窗口能放下無限的按鈕。每一個If Then也同樣只能控制或完成一項任務。在If Then里面也可以增加下一級的判斷。如增加Select...Case...EndSelect。看示例:
While 1
$msg = GUIGetMsg()
if $msg = $exit Then
MsgBox(0, "退出", "退出控制嗎!")
Exit
EndIf
if $msg = $ok Then
Select
Case $msg = $ok1
MsgBox(0, "按鈕的控制1", "控制1!")
Case $msg = $ok2
MsgBox(0, "按鈕的控制", "控制2!")
Case $msg = $ok3
MsgBox(0, "按鈕的控制", "控制3!")
Case $msg = $ok4
MsgBox(0, "按鈕的控制", "控制4!")
...
Case $msg = $GUI_EVENT_CLOSE or $msg = $Cancel
MsgBox(0, "按鈕的控制", "控制結束! ")
ExitLoop
EndSelect
EndIf
WEnd
3、注意的事項。在運用判斷語句時,無論是用Select...Case...EndSelect語句,還是用If Then語句時,都要注意:設計任務或動作的腳本最好是在判斷語句中一次運行完。另外,關閉窗口和退出的語句都不要忘記加上。如($msg = $GUI_EVENT_CLOSE;$msg = $exit)。特別是在多級判斷語句里,不要忘記退出循環的語句。如(ExitLoop;EndSelect;EndIf;WEnd)。
關於GUI設計中的其他控件的制作與應用將在第三講中詳細解答。