如何製作自定義工具欄
07-18
1、建立的方法 (1)建立新類別。在命令窗口中執行CREATE CLASS命令後,在新建類窗口中鍵入類別及類別庫的名稱. (2)加入按鈕對象。當進入類設計器時會發現Toolbar的窗口很小,因此你要仔細的建立按鈕,按下工具欄中的按鈕,再在類設計器中的工具欄內單擊滑鼠左鍵,以加入一個按鈕到該自定義工具欄中,並修改按鈕的特性為: Caption=』』 Picture=Top1.bmp 如果發現圖形不能完全顯示,表示圖形太大可以修改成小一點的圖形或將按鈕拉大,如果要在按鈕之間加入空格,請按下按鈕,並在按鈕之間按下。 (3)編寫按鈕的事件過程。就是對每個按鈕編寫各自的Click過程,這與表單中按鈕的Click事件建立過程一樣。 (4)保存。按下Ctrl+W將該類別保存到LIBS.VCX類別庫中。 2、類別的應用 此類別是一個Toolbar,而Toolbar事實上也是表格的一種,只是某些特性與表格不同,因此,如果顯示數據的畫面也是一個表格,便不能將其加入到數據顯示錶格中,因此我們要建立一個更大的對象以便同時加入表格和工具欄,此對象便是Formset。 (1)建立新表格。在命令窗口中執行:CREATE FORM (2)建立表格集。請選定表單菜單中的創建表格集選項。 (3)建立工具欄對象。對於工具欄不是直接以視覺化方式加入到表格集中的,而是通過程序建立,在Formset的ini事件中編寫如下程序: SET CLASSLIB TO libs ADDITIVE This.AddObject(』mybar』,』move_rec』) This.mybar.show This.mybar.dock(0)?? 關於dock()函數的說明: 值 常量 說明 -1 TOOL_NOTDOCKED 不停放工具欄。 0 TOOL_TOP 在 Visual FoxPro 主窗口的頂部停放工具欄。 1 TOOL_LEFT 在 Visual FoxPro 主窗口的左邊停放工具欄。 2 TOOL_RIGHT 在 Visual FoxPro 主窗口的右邊停放工具欄。 3 TOOL_BOTTOM 在 Visual FoxPro 主窗口的底部停放工具欄。 (4)執行。在執行表單的同時工具欄會被自動打開. THE NEXT WAY: 1、自定義屬性可以變成對象; 2、對象可以象普通變數一樣被傳遞到其他對象或其他對象的屬性中,接收該對象變數的屬性將變為對象; 3、源對象如果未被釋放,將和接收被傳遞對象的屬性變成的對象一模一樣。也就是說,我們等於在目標屬性上插入了一個源對象的鏈接。 我們先看第二條,對象可以被象普通變數一樣被傳遞。 在上一篇中我專門討論了「對象也是一種變數」的觀點,只有理解了這一點,才能夠接受傳遞對象的理論——是變數那麼當然可以被傳遞了。實際上,對象變數被傳遞的方式更類似於傳遞數組,帶著屬性就好象數組的子集,也是一種變數! 沒錯,這就是我要證明的第二點:屬性也是變數! 尤其是自定義屬性,正因為其變數的本質,所以:屬性也可以象變數一樣被改變數據類型! 正如我們在《VFP6中的_Assign方法》一文中所看到的,一個表單的自定義屬性,原來是邏輯型數據的,在將該屬性指定為一個對象變數的名稱以後,它的數據類型變成了對象型「O」,而且竟然也有了自己的屬性! 屬性的屬性——不太好理解吧?其實,根本沒什麼屬性的屬性。原來的那個屬性,現在已經變成了一個不折不扣的對象。是對象,當然可以有自己的屬性了。而且,要注意的是:這個對象跟源對象是一模一樣的——不止是一模一樣,其實根本就是一個對象。 比如說:現在有表單A和B,A上帶有一個Custom對象AOC;B有一個屬性RcvAoc。現在我們從A表單向B表單傳遞AOC對象: DO form B with thisform.AOC thisform.hide 在B的INIT事件中接收AOC對象變數,並將它賦值給屬性RcvAoc: LParameters tmprcv thisform.RcvAoc=tmprcv 這時,B表單的RcvAoc屬性變成了一個與A表單的AOC對象除了名字外一模一樣的對象,你可以用調試器的局部窗口觀察一下。 從這時開始,我們對RcvAoc做的修改會反應在AOC上,而在AOC上做的修改也會反應在RcvAoc上。看到這裡,你也許會脫口而出:這不是鏈接嘛! 沒錯,這就是我想證明的第三點:這種屬性接收對象的傳遞變換,其實質是對象的鏈接。 一口氣談了那麼多理論問題,你也許有點煩了:這看來有趣,但有什麼用呢?別急,下面,我們就用這個理論來解決一個困擾我們多久的實際問題:給頂層表單添加工具欄。 頂層表單有些特殊性,是因為它的「頂層」的緣故。 用普通的建立工具欄的方法給頂層表單添加工具欄,會發現工具欄不能正常顯示。事實上,工具欄被頂層表單擋在後面了,即使你把頂層表單的SHOWWINDOW屬性設置為「最上層表單」、把AlwaysOnTop屬性設置為.T.也沒用。這是因為工具欄是一種特殊的表單,而在VFP中除了應用程序對象_VFP和_SCREEN對象,沒有其它任何錶單的層級比頂層表單高。 有的朋友就此認為頂層表單無法添加工具欄,因而放棄了使用頂層表單而用「古老」的屏幕。其實,頂層表單還是可以有工具欄的。 要給頂層表單程序添加工具欄,必須把工具欄做在頂層表單本身上,也就是說:要做成TOPFORM.ToolBar的形式。 下面是我參考有關書籍和《VFP6中的_Assign方法》一文找到的解決辦法: 1.在類庫MyVcx中建立一個工具欄類MyToolBar,將工具欄的ShowWindow屬性設置為1——最上層表單; 2.給頂層表單添加一個自定義屬性TopToolBar; 3.編輯頂層表單的Activate event,輸入以下代碼: This.TopToolBar=NewObject("MyToolBar","MyVcx") This.TopToolBar.show() This.TopToolBar.dock(0) 現在,你就可以享受頂層表單的工具欄了! 以上只是應用三條原則中的第一條「屬性可以變成對象」而已。用這三條金鑰匙、發揮你的想像力,你可以作出更漂亮的魔術!文章出處:http://www.diybl.com/course/3_program/rfoxpro/2007617/62706.html
推薦閱讀:
推薦閱讀: