电竞比分网-中国电竞赛事及体育赛事平台

分享

如何制作自定義工具欄

 悟靜 2009-06-16
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ù)!

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多