首先創建對話框應用程序,打開 main.aau,在【對話框】上添加一個按鈕,如下圖:

然后暫時望記這按鈕,在工具箱點擊鼠標指針,然后在【對話框設計器】中點擊【窗體】,按鈕控件周圍的八個小方塊不見了,這表示他失去焦點了。然后我們點擊快手右側【屬性面板】,在里面修改邊框屬性為:resizable

把邊框設置為resizable,那么窗體運行以后就可以用鼠標拖動邊框調整大小了。

然后繼續在【對話框設計器】上添加一個【文本框控件】,用鼠標拖動控件右下角的小方塊調整到合適大小, 如下圖:

別忘記了窗體是可調整大小的,我們希望【控鈕控件】大小不變,總是顯示在【窗體】的右下角,然后我們希望【文本框控件】大小是可變的,總是盡可能顯示到最大,首先點擊【文本框控件】,在屬性面板中點擊【固定邊距】前面的加號展開所有選項:

然后設置左、右、上、下四個邊距的屬性為true,true就是真,false就是假,在編程中稱為【邏輯值】或者【布爾值】再按上面的方法設置【按鈕控件】固定下邊距、固定右邊距。然后在快手中點擊【運行】測試一下效果,試試最大化運行顯示的對話框。然后修改按鈕控件的文本屬性為“點我抓取”,如下圖:

然后在【對話框設計器】中雙擊按鈕控件,自動切換到代碼視圖。快手編輯器自動的添加了一個事件函數:

首先,我們刪除上面的注釋,雙斜杠開始的行是注釋語句,一般顯示為綠色,注釋語句在運行時會被忽略,這里的注釋語句僅僅是演示用法,我們可以先刪掉不必要注釋(程序中不要包含不必要的注釋是一個良好習慣),變成下面這樣:

function關鍵字定義一個函數,函數將一小段代碼包含在一對大括號里,構成了一個短小的子程序。
下次我們要調用這段子程序,只要輸入函數名字加圓括號就可以,例如我們執行代碼mainForm.button.oncommand() 也就是執行上面我們定義的函數。
不過 oncommand是個特殊的函數,一般不是我們自己調用,而是在用戶點擊按鈕時,由窗體對象自動調用的函數 - 也就是回調函數。
例如你認識了一個新朋友,他會跟你說:“Hi,請把你的電話號碼留給我,你不要打電話給我,我有需要會打給你的”,這就是回調的一種形式了,回調函數也一樣,你定義好 mainForm.button.oncommand 這個函數,窗體會在有需要時自動調用你的oncommand函數。我們決定在用戶點擊按鈕時修改文本框的內容,于是我們輸入 mainForm.edit. 當輸入圓點以后,快手編輯器自動列出了名字為edit的控件對象所有可用的成員屬性、以及成員函數。如下圖:

經驗是個很好的東西,所有的控件用法類似,甚至在不同編程語言里 - 常用的屬性名、函數名都是類似的,再加上快手編輯器提供的代碼自動提示功能,我們一般能快速的找到需要的屬性、或方法。
有的新手可能會說:“我是真正的小白,什么經驗也沒有,我還是想知道edit控件到底有哪些可用的屬性,最好是中文的說明”,好吧,我告訴你怎么找到這些東西,所有的窗口控件,都是在標準庫的 win.ui.ctrl 名字空間下定義的(別問我什么是名字空間,你不需要搞清楚,其實我也不清楚)。在標準庫中找到 win.ui.ctrl.edit 然后雙擊鼠標左鍵打開庫文件, 如下圖:


完成我們所有的代碼如下( 鼠標放到代碼上,然后你能在代碼右上角看到復制源碼的工具條 ):

我們進一步修改上面的程序,我們希望點擊按鈕控件不僅僅只是顯示 “hello world”,而是抓取一個網頁的html源碼,并顯示在文本框中。
我們希望在標準庫中有一個名字空間叫 myTools 包含了我們需要的函數,而我們希望 myTools 名字空間下有一個 myTools.getHtml() 函數用來抓取網頁的HTML源碼。
但是很遺憾,標準庫里沒有這些東西,當然,我們可以在工程的用戶庫里添加自定義的庫。下面我們在工程用鼠標右鍵中點擊【用戶庫】,彈出下圖的菜單:

在彈出的【用戶庫】菜單中點擊【新建庫】,彈出【新建】對話框如下圖:

直接輸入新用戶庫的名字"myTools",點后點擊【打開】按鈕,一切很順利,在【工程管理器】的【用戶庫】目錄下多了庫文件 myTools,并且在編輯器中自動打開了這個庫,如下圖:

用戶庫中添加了默認代碼

namespace 定義一個新的名字空間,我們可以在名字空間中添加需要的函數 getHtml,修改用戶庫代碼如下;

return 語句指定函數的返回值。繼續修改上面的代碼,將 return "返回值"; 改為返回網頁源碼。
因為我們需要抓取網頁,需要用到標準庫中的 inet.http 對象,我們使用 import inet.http; 導入這個庫備用,修改代碼如下:

點擊快手【快捷工具欄】的【保存】按鈕保存庫文件。

切換到 main.aau ,修改按鈕回調函數為如下代碼:

我們發現一點小小的不足,myTools.getHtml()只是固定的抓取指定網址,這非常的不方便,我們再回到 myTools 用戶庫,將網址修改為可變的函數參數,修改后的 myTools庫源碼如下( 修改部份為粗體字 ):

函數多了一個網址參數,在調用時需要由調用者在參數中傳入要抓取的網址,在 myTools用戶庫最后面,添加一小段智能提示配置代碼,如下:

點擊【保存】按鈕保存庫文件,然后在【工程管理器】中右鍵點擊用戶庫,在彈出菜單中點擊【刷新目錄、智能提示】

我們回到 main.aau 文件,修改 mainForm.button.oncommand 事件回調函數如下:

我們還遇到一個問題,如果網速比較慢的話,抓取的時間會很長,在單線程的窗口程序中,如果線程被耗時的操作所阻塞,也就不能正常的處理用戶消息,導致用戶點擊界面沒有反應。
這時候就需要用到多線程了,使用 thread.create() 可以創建線程,我們還要用 thread.waitOne() 函數等待線程執行完成。
在窗口程序中,可以使用更簡單的 win.invoke() 函數創建工作線程。
win.invoke() 會創建一個工作線程執行代碼,并且等待線程結束,然后獲取返回值。
我們修改 main.aau 中 mainForm.button.oncommand 函數代碼如下:

看完上面的教程相信大家心中已經有一些操作方向了。
新聞熱點
疑難解答
圖片精選