首先創建對話框應用程序,打開 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 事件回調函數如下:
我們還遇到一個問題,如果網速比較慢的話,抓取的時間會很長,