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