第九章 菜單、工具欄和類(lèi)設(shè)計(jì)_第1頁(yè)
第九章 菜單、工具欄和類(lèi)設(shè)計(jì)_第2頁(yè)
第九章 菜單、工具欄和類(lèi)設(shè)計(jì)_第3頁(yè)
第九章 菜單、工具欄和類(lèi)設(shè)計(jì)_第4頁(yè)
第九章 菜單、工具欄和類(lèi)設(shè)計(jì)_第5頁(yè)
已閱讀5頁(yè),還剩101頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

第九章菜單、工具欄和類(lèi)設(shè)計(jì)9.1菜單設(shè)計(jì)9.2類(lèi)的設(shè)計(jì)9.3創(chuàng)建自定義工具欄結(jié)束放映?YES(是)NO(否)9.1

菜單設(shè)計(jì)菜單設(shè)計(jì)的概念菜單系統(tǒng)的規(guī)劃菜單系統(tǒng)的創(chuàng)建菜單系統(tǒng)的運(yùn)行與測(cè)試SETSYSMENU命令菜單設(shè)計(jì)綜合舉例9.2類(lèi)的設(shè)計(jì)類(lèi)的創(chuàng)建方法

使用“類(lèi)設(shè)計(jì)器”創(chuàng)建類(lèi)使用編程方式創(chuàng)建類(lèi)把表單另存為類(lèi)類(lèi)的使用

擴(kuò)展VFP的基類(lèi)新類(lèi)的注冊(cè)與使用類(lèi)設(shè)計(jì)的其它問(wèn)題類(lèi)設(shè)計(jì)綜合舉例9.3創(chuàng)建自定義工具欄定義工具欄類(lèi)用編程方式定義工具欄類(lèi)為表單集添加工具欄類(lèi)

菜單設(shè)計(jì)的概念

菜單設(shè)計(jì)是VFP程序設(shè)計(jì)的一個(gè)重要組成部分,任何應(yīng)用程序系統(tǒng)通常都少不了菜單,它是應(yīng)用程序和用戶(hù)溝通的橋梁。因此,菜單系統(tǒng)往往也是用戶(hù)評(píng)價(jià)應(yīng)用程序性能的重要方面。菜單系統(tǒng)設(shè)計(jì)一般可以分為規(guī)劃、創(chuàng)建和運(yùn)行測(cè)試三個(gè)主要步驟。菜

統(tǒng)

規(guī)

菜單系統(tǒng)的規(guī)劃設(shè)計(jì)一般應(yīng)遵守下述基本原則:按用戶(hù)執(zhí)行的任務(wù)而不按程序的層次結(jié)構(gòu)來(lái)組織菜單系統(tǒng)。按預(yù)計(jì)菜單使用頻率、邏輯順序來(lái)組織菜單項(xiàng)及其中的子菜單。為每一個(gè)菜單項(xiàng)及其中的子菜單指定一個(gè)有意義的標(biāo)題,設(shè)置必要的提示信息。合理為子菜單分組,并使用分隔線。盡可能為每個(gè)菜單項(xiàng)和子菜單設(shè)置訪問(wèn)鍵和快捷鍵。菜單項(xiàng)和子菜單都應(yīng)限制在一個(gè)屏幕內(nèi),必要時(shí)可增加級(jí)聯(lián)子菜單。菜

統(tǒng)

的創(chuàng)建

菜單可以通過(guò)編程來(lái)創(chuàng)建,但利用VFP提供的菜單設(shè)計(jì)工具,可以在窗口中直觀地設(shè)計(jì)菜單,再利用系統(tǒng)生成菜單系統(tǒng)。創(chuàng)建菜單系統(tǒng)的具體內(nèi)容與方法如下:

1.一般菜單的創(chuàng)建利用“菜單設(shè)計(jì)器”創(chuàng)建應(yīng)用程序菜單系統(tǒng)這種方法可根據(jù)用戶(hù)的具體要求,創(chuàng)建用戶(hù)自定義的菜單系統(tǒng)。利用菜單中“快速菜單”創(chuàng)建應(yīng)用程序菜單系統(tǒng)這種方法是將VFP主菜單系統(tǒng)加載到“菜單設(shè)計(jì)器”,通過(guò)增加、刪除和修改達(dá)到快速創(chuàng)建菜單的目的。

2.快捷菜單的創(chuàng)建利用“快捷菜單設(shè)計(jì)器”創(chuàng)建快捷菜單利用“快速菜單”創(chuàng)建菜單系統(tǒng)方法步驟如下:(1)在“新建”對(duì)話框中選擇文件類(lèi)型為“菜單”,單擊新建文件按鈕。(2)在“新菜單”對(duì)話框中單擊菜單按鈕,彈出“菜單設(shè)計(jì)器”窗口,此時(shí),主菜單欄上出現(xiàn)“菜單”菜單,其中包含用于創(chuàng)建和修改菜單系統(tǒng)的命令。(3)執(zhí)行菜單→快速菜單,即出現(xiàn)加載了VFP的主菜單系統(tǒng)的“菜單設(shè)計(jì)器”窗口。(4)修改該主菜單系統(tǒng)的內(nèi)容。(5)打開(kāi)“另存為”對(duì)話框,輸入菜單文件名(擴(kuò)展名為.MNX,其備注文件擴(kuò)展名為.MNT),單擊保存按鈕,關(guān)閉“菜單設(shè)計(jì)器”窗口?!靶虏藛巍睂?duì)話框加載了VFP主菜單系統(tǒng)的“菜單設(shè)計(jì)器”利用“菜單設(shè)計(jì)器”創(chuàng)建菜單系統(tǒng)創(chuàng)建菜單項(xiàng)和子菜單菜單項(xiàng)的設(shè)置菜單層的設(shè)置菜單系統(tǒng)選項(xiàng)設(shè)置

使用“菜單設(shè)計(jì)器”創(chuàng)建應(yīng)用程序菜單系統(tǒng)有以下內(nèi)容:

(1)在“新建”對(duì)話框中選擇文件類(lèi)型為“菜單”,單擊新建文件按鈕。

(2)在“新菜單”對(duì)話框中單擊菜單按鈕,彈出“菜單設(shè)計(jì)器”窗口,不執(zhí)行快速菜單命令,則“菜單設(shè)計(jì)器”窗口中顯示一個(gè)空白的“菜單1”,可由此開(kāi)始創(chuàng)建應(yīng)用程序菜單系統(tǒng)?,F(xiàn)將創(chuàng)建菜單項(xiàng)和子菜單的基本方法歸納如下:①菜單名稱(chēng)指定菜單項(xiàng)及子菜單的標(biāo)題,默認(rèn)第一個(gè)字母為訪問(wèn)鍵鍵名字母(漢字無(wú)效)。也可在標(biāo)題文字中的任何位置用“\<”后緊跟鍵名字母定義訪問(wèn)鍵,例如“文件(\<F)”。創(chuàng)建菜單項(xiàng)和子菜單(1)

菜單項(xiàng)分組

為增強(qiáng)菜單的可讀性,可用“\-”作菜單的標(biāo)題定義分隔線(此時(shí)其它選項(xiàng)用默認(rèn)值)將菜單中內(nèi)容相關(guān)的菜單項(xiàng)分隔成組。方法是在菜單名稱(chēng)中鍵入“\-”。③

結(jié)果

指定在選擇菜單項(xiàng)時(shí)發(fā)生的動(dòng)作。其中包含:命令執(zhí)行一個(gè)命令。如,DOFORMMIAN(MAIN為表單名)。填充名稱(chēng)指定一個(gè)系統(tǒng)或已存在的菜單名。例如,_MSM_FILE(文件菜單項(xiàng))。子菜單打開(kāi)一個(gè)子菜單。設(shè)計(jì)過(guò)程中需繼續(xù)創(chuàng)建并定制子菜單項(xiàng)。過(guò)程運(yùn)行一個(gè)過(guò)程。創(chuàng)建菜單項(xiàng)和子菜單(2)

創(chuàng)建在結(jié)果為子菜單或過(guò)程時(shí)用于創(chuàng)建子菜單或過(guò)程,創(chuàng)建過(guò)程將打開(kāi)一個(gè)編輯窗口,在窗口中輸入過(guò)程代碼。⑤

編輯更改已建立的相關(guān)的子菜單或過(guò)程。⑥

菜單級(jí)選擇要處理的不同層次的菜單或子菜單。⑦

移動(dòng)控件菜單名稱(chēng)列左邊的雙向箭頭按鈕,用鼠標(biāo)點(diǎn)住它拖動(dòng)可以調(diào)整菜單項(xiàng)或子菜單的位置。⑧“菜單設(shè)計(jì)器”窗口中的命令按鈕的作用:插入添加新菜單項(xiàng)插入欄在子菜單中添加VFP系統(tǒng)菜單條刪除刪除已建菜單項(xiàng)或子菜單項(xiàng)預(yù)覽查看菜單運(yùn)行時(shí)的效果,但不執(zhí)行菜單任務(wù)創(chuàng)建菜單項(xiàng)和子菜單(3)“菜單設(shè)計(jì)器”窗口中顯示的空白“菜單1”創(chuàng)建菜單項(xiàng)和子菜單的“菜單設(shè)計(jì)器”窗口分隔線選項(xiàng)按鈕

(1)選項(xiàng)設(shè)置每個(gè)菜單項(xiàng)和子菜單的后面都有一個(gè)選項(xiàng)按鈕,用于確定菜單項(xiàng)和子菜單的相關(guān)選項(xiàng)。單擊選項(xiàng)按鈕,出現(xiàn)“提示選項(xiàng)”對(duì)話框,其中:鍵標(biāo)簽指定菜單項(xiàng)或子菜單的可選鍵盤(pán)快捷鍵的鍵組合(CTRL鍵或ALT鍵與其它鍵的組合),方法是按下要指定的鍵組合,但不能將CTRL+J指定為菜單項(xiàng)的快捷鍵。鍵說(shuō)明顯示需要出現(xiàn)在菜單項(xiàng)旁邊的快捷鍵提示文字,除非將其更改,否則與“鍵標(biāo)簽”相同。

定制菜單項(xiàng)(1)

定制菜單項(xiàng)(2)跳過(guò)顯示“表達(dá)式生成器”,在“表達(dá)式生成器”的“跳過(guò)”框中,輸入表達(dá)式來(lái)確定菜單項(xiàng)是否可用。如表達(dá)式為“真”(.T.),則菜單項(xiàng)不可用。信息顯示“表達(dá)式生成器”,在“表達(dá)式生成器”的“信息”框中,可以輸入用于選擇菜單時(shí)顯示在VFP主窗口狀態(tài)欄中的提示信息。主菜單名指定菜單項(xiàng)的名稱(chēng),如果未指定則VFP自動(dòng)生成。使用該名稱(chēng)可在運(yùn)行時(shí)引用菜單項(xiàng)。此選項(xiàng)只在“菜單設(shè)計(jì)器”窗口的“結(jié)果”為“命令”、

定制菜單項(xiàng)(3)“子菜單”或“過(guò)程”時(shí)顯示。注釋輸入開(kāi)發(fā)者使用的注釋信息。在任何情況下注釋都不影響所生成的代碼,運(yùn)行菜單程序時(shí)VFP將忽略注釋。

菜單選項(xiàng)設(shè)置執(zhí)行菜單命令顯示→菜單選項(xiàng),打開(kāi)“菜單選項(xiàng)”對(duì)話框。在該對(duì)話框中允許為特定的菜單(菜單欄或菜單項(xiàng))指定過(guò)程代碼,這里的過(guò)程需要用過(guò)程定義語(yǔ)句定義。其中包括如下設(shè)置內(nèi)容:菜單層的設(shè)置(1)名稱(chēng)包含菜單項(xiàng)名。默認(rèn)情況下,與“菜單設(shè)計(jì)器”和“菜單級(jí)”中的文本相同,可在菜單名稱(chēng)列中鍵入一個(gè)新名來(lái)更改它。過(guò)程創(chuàng)建菜單過(guò)程代碼或顯示已存在的代碼?!熬庉嫛卑粹o打開(kāi)一個(gè)編輯窗口,代替在過(guò)程下的文本編輯區(qū)中創(chuàng)建代碼。菜單層的設(shè)置(2)“提示選項(xiàng)”對(duì)話框“菜單選項(xiàng)”對(duì)話框菜單系統(tǒng)選項(xiàng)設(shè)置(1)

執(zhí)行菜單命令顯示→常規(guī)選項(xiàng),打開(kāi)“常規(guī)選項(xiàng)”對(duì)話框。在該對(duì)話框中,主要對(duì)整個(gè)菜單系統(tǒng)有關(guān)的項(xiàng)目進(jìn)行設(shè)置。

(1)在“過(guò)程”下的文本編輯框中創(chuàng)建用于整個(gè)菜單系統(tǒng)的過(guò)程,這里的過(guò)程需要用過(guò)程定義語(yǔ)句。但在菜單項(xiàng)中調(diào)用它時(shí),應(yīng)在“結(jié)果”中選中“過(guò)程”,再用DO命令調(diào)用。

“編輯”按鈕:打開(kāi)編輯窗口,代替“過(guò)程”下的文本編輯框,在其中創(chuàng)建代碼。

(2)在“位置”選項(xiàng)按鈕組中,確定應(yīng)用程序菜單系統(tǒng)與VFP主菜單系統(tǒng)或當(dāng)前活動(dòng)菜單系統(tǒng)的關(guān)系。具體是:替換使用新的菜單系統(tǒng)替換VFP主菜單系統(tǒng)。菜單系統(tǒng)選項(xiàng)設(shè)置(2)追加將新菜單系統(tǒng)添加在VFP主菜單系統(tǒng)的后面。在…之前將新菜單插入VFP主菜單系統(tǒng)中指定菜單項(xiàng)的前面。這個(gè)選項(xiàng)顯示一個(gè)包含VFP主菜單系統(tǒng)菜單項(xiàng)名稱(chēng)的下拉列表,選擇希望新菜單在其后面的菜單項(xiàng)名。在…之后與上一功能的作用正好相反。

(3)在“菜單代碼”復(fù)選框組中選擇“設(shè)置”或“清理”單擊確定按鈕激活編輯窗口,編寫(xiě)相應(yīng)代碼。設(shè)置向菜單系統(tǒng)添加初始化代碼。菜單系統(tǒng)選項(xiàng)設(shè)置(3)清理向菜單系統(tǒng)添加清理代碼,在清理代碼的后面可以用過(guò)程定義語(yǔ)句定義過(guò)程,這里定義的過(guò)程在所有菜單命令中都可以使用,但在菜單命令調(diào)用的程序(過(guò)程或表單等)中使用時(shí)須加IN子句,格式為:DO<過(guò)程名>IN<菜單程序文件名>。

(4)確定菜單的使用對(duì)象頂層表單如果選定,允許該菜單在頂層表單(SDI)中使用。如果未選定,只允許在VFP主窗口中使用該菜單。創(chuàng)建SDI菜單后,可將其加到SDI表單中。方法是先設(shè)置表單的ShowWindow屬性為“2-作為頂層表單”,然后為表單的Init事件添加以下代碼:

DO菜單名WITHTHIS,.T.代碼例如菜單名指定的菜單若為SDI菜單,則運(yùn)行表單時(shí),菜單加載在表單中,否則將加載在表單之外。

【例9.1.1】利用“快速菜單”功能建立一個(gè)新菜單,菜單文件名為MYAPP.MNX。要求如下:(1)保留系統(tǒng)主菜單中“文件”、“編輯”和“幫助”三個(gè)菜單項(xiàng)及其中的所有子菜單。(2)在“文件”菜單項(xiàng)前插入“系統(tǒng)維護(hù)”,將“顯示”菜單項(xiàng)改為“應(yīng)用程序”。(3)“系統(tǒng)維護(hù)”菜單項(xiàng)有一個(gè)菜單命令“文件管理”,任務(wù)是執(zhí)行命令“DOFORMFILT”,“應(yīng)用程序”菜單項(xiàng)共有三個(gè)菜單命令“人員管理”、“工資管理”,分別執(zhí)行命令“DOFORMJBQK”和“DOFORMGZQK”,其后插入VFP的“運(yùn)行”菜單條。(4)在“文件”菜單項(xiàng)中的“退出”子菜單前插入一個(gè)子菜單項(xiàng)“返回系統(tǒng)”,任務(wù)是執(zhí)行一個(gè)過(guò)程,有兩條語(yǔ)句“CLOSEALL”和“SETSYSMENUTODEFAULT”菜單設(shè)計(jì)綜合舉例(1)菜單設(shè)計(jì)綜合舉例(2)

【例9.1.2】創(chuàng)建一個(gè)人事管理系統(tǒng)菜單,保存在MAIN.MNX文件中,要求如下:

①替代VFP主菜單系統(tǒng)。②為整個(gè)菜單系統(tǒng)創(chuàng)建一個(gè)缺省過(guò)程DULT,用于顯示一個(gè)消息框。③輸入菜單的初始化代碼:SETTALKOFF、MYPSD=.F._SCREEN.Caption=“人事管理系統(tǒng)”;輸入菜單的清理代碼:CLOSEDATA、READEVENTS。④各菜單項(xiàng)及其子菜單和標(biāo)題、訪問(wèn)鍵、結(jié)果及其內(nèi)容見(jiàn)表—人事管理系統(tǒng)菜單。⑤“系統(tǒng)維護(hù)”菜單項(xiàng)中除“用戶(hù)口令”和“退出系統(tǒng)”以外的所有子菜單,以及其它菜單項(xiàng)的跳過(guò)條件均為MYPSD=.F.。⑥為“系統(tǒng)維護(hù)”菜單項(xiàng)中的“退出系統(tǒng)”定義快捷鍵:CTRL+X

表:

人事管理系統(tǒng)菜單

菜單項(xiàng)標(biāo)題

子菜單標(biāo)題

訪問(wèn)鍵

結(jié)果及其內(nèi)容

主菜單名

S

子菜單

MY_XTWH

用戶(hù)口令

P

命令:DOFORMPSWDTOMYPSD

分隔線

文件管理

F

命令:DOFORMFILT

初始化數(shù)據(jù)

I

命令:DOMYZAP

分隔線

系統(tǒng)維護(hù)

退出系統(tǒng)

E

過(guò)程:CLEAREVENTS、QUIT

N

子菜單

MY_SJCL

基本情況

C

命令:DOFORMJBQK

工資情況

G

命令:DOFORMGZQK

崗位情況

W

命令:DOFORMGWQK

數(shù)據(jù)處理

部門(mén)情況

B

命令:DOFORMBMQK

統(tǒng)計(jì)

T

命令:DODULT

MY_TJ

查詢(xún)

X

命令:DODULT

MY_CX

打印

P

命令:DODULT

MY_DY

幫助

H

命令:DODULT

MY_BZ

“常規(guī)選項(xiàng)”對(duì)話框VFP主菜單系統(tǒng)菜單項(xiàng)名稱(chēng)的下拉列表利用“快捷菜單設(shè)計(jì)器”創(chuàng)建快捷菜單

在“新菜單”對(duì)話框中,單擊快捷菜單按鈕,彈出“快捷菜單設(shè)計(jì)器”窗口。窗口界面與“菜單設(shè)計(jì)器”相同,創(chuàng)建并定制快捷菜單的方法與創(chuàng)建菜單系統(tǒng)的方法類(lèi)似(運(yùn)行快捷菜單的命令代碼必須放到控件的RightClick事件中)。

【例題】創(chuàng)建一個(gè)快捷菜單,菜單文件名為SETFORM.mnx,具體要求是:七個(gè)菜單項(xiàng)“首記錄”、“上一記錄”、“下一記錄”、“末記錄”、“設(shè)置背景”、“刷新”和“關(guān)閉”?!澳┯涗洝焙汀霸O(shè)置背景”之間加一條分隔線?!翱旖莶藛卧O(shè)計(jì)器”窗口“系統(tǒng)維護(hù)”的子菜單項(xiàng)“文件管理”“應(yīng)用程序”的子菜單“文件”的子菜單項(xiàng)“返回系統(tǒng)”的過(guò)程代碼例題9.1.1菜單的運(yùn)行例題9.1.2菜單的運(yùn)行菜單系統(tǒng)的運(yùn)行和測(cè)試(1)

1.生成菜單程序菜單文件不能像表單文件那樣直接運(yùn)行,需要生成擴(kuò)展名為.MPR的菜單程序文件。方法是在“菜單設(shè)計(jì)器”或“快捷菜單設(shè)計(jì)器”窗口中打開(kāi)菜單,執(zhí)行菜單命令菜單→生成,將彈出“生成菜單”對(duì)話框,“輸出文件”的默認(rèn)文件名與菜單文件名相同,但擴(kuò)展名為.MPR,單擊按鈕將彈出“另存為”對(duì)話框用于修改菜單程序文件名,單擊產(chǎn)生按鈕,將自動(dòng)生成菜單程序文件。

2.運(yùn)行菜單

運(yùn)行菜單與執(zhí)行程序基本一樣,可以在交互方式下執(zhí)行菜單命令程序→運(yùn)行,在“運(yùn)行”對(duì)話框中輸入菜單程序文件名,單擊運(yùn)行按鈕即可。菜單系統(tǒng)的運(yùn)行和測(cè)試(2)也可以在命令窗口或程序中用DO命令執(zhí)行,但必須帶擴(kuò)展名,例如:DOMAIN.MPR如果在交互方式下運(yùn)行菜單后想恢復(fù)VFP主菜單系統(tǒng),可在命令窗口執(zhí)行“SETSYSMENUTODEFAULT”命令。如果將菜單程序文件作為應(yīng)用程序程序的主程序,通常在菜單的清理代碼中包含“READEVENTS”語(yǔ)句,且在退出應(yīng)用程序系統(tǒng)的相應(yīng)菜單命令中包含“CLEAREVENTS”語(yǔ)句。快捷菜單通常在表單集、表單或?qū)ο蟮腞ightClick事件代碼中調(diào)用,這樣當(dāng)用戶(hù)右擊時(shí)即彈出快捷菜單。

3.測(cè)試菜單系統(tǒng)

測(cè)試菜單系統(tǒng)的方法非常簡(jiǎn)單,只要運(yùn)行菜單并對(duì)照規(guī)劃設(shè)計(jì)要求,測(cè)試菜單和子菜單的各項(xiàng)功能。發(fā)現(xiàn)錯(cuò)誤須在“菜單設(shè)計(jì)器”或“快捷菜單設(shè)計(jì)器”窗口中修改,并重新生成菜單程序文件。如此反復(fù)進(jìn)行,直至符合要求為止。菜單系統(tǒng)的運(yùn)行和測(cè)試(3)“生成菜單”對(duì)話框“另存為”對(duì)話框“運(yùn)行”對(duì)話框

功能:在程序運(yùn)行期間,啟用或廢止VisualFoxPro系統(tǒng)菜單欄,并對(duì)其重新配置。

語(yǔ)法:SETSYSMENUON|OFF|AUTOMATIC|TO[MenuList]|TO[MenuTitleList]|TO[DEFAULT]|SAVE|NOSAVE

參數(shù):

ON

在程序執(zhí)行期間,當(dāng)VisualFoxPro等待諸如BROWSE、READ和MODIFYCOMMAND等命令的鍵盤(pán)輸入時(shí),啟用VisualFoxPro主菜單欄。

OFF

在程序執(zhí)行期間廢止VisualFoxPro

主菜單欄。SETSYSMENU

命令的使用(1)

AUTOMATIC

使VisualFoxPro主菜單欄在程序執(zhí)行期間可見(jiàn)??梢栽L問(wèn)菜單欄,但菜單項(xiàng)是啟用還是廢止則取決于不同的命令。在VisualFoxPro中,默認(rèn)設(shè)置是AUTOMATIC。

TO[MenuList]

TO[MenuTitleList]

指定VisualFoxPro

主菜單欄中菜單或菜單標(biāo)題的子集。這些菜單或菜單標(biāo)題可以是主菜單中的菜單或菜單標(biāo)題的任意組合,相互之間用逗號(hào)隔開(kāi)。菜單和菜單標(biāo)題的內(nèi)部名稱(chēng)列在系統(tǒng)菜單名稱(chēng)中。SETSYSMENU

命令的使用(2)

例如,下面的命令從VisualFoxPro主菜單欄中移去除“文件”和“窗口”菜單外的所有菜單:

SETSYSMENUTO_MFILE,_MWINDOW

使用RELEASEBAR可指定菜單中的可用菜單項(xiàng)。

TO[DEFAULT]

將主菜單欄恢復(fù)為默認(rèn)設(shè)置。如果對(duì)主菜單欄或它的菜單做過(guò)修改,可發(fā)出SETSYSMENUTODEFAULT命令恢復(fù)。使用SETSYSMENUSAVE可以指定默認(rèn)設(shè)置。

SAVE

使當(dāng)前菜單系統(tǒng)成為默認(rèn)設(shè)置。如果在發(fā)出SETSYSMENUSAVE命令之后修改了菜單系統(tǒng),可以通過(guò)發(fā)出SETSYSMENUTODEFAULT命令來(lái)恢復(fù)前面的設(shè)置。SETSYSMENU

命令的使用(3)

NOSAVE

重置菜單系統(tǒng)為默認(rèn)的VisualFoxPro系統(tǒng)菜單。但是,只有當(dāng)發(fā)出SETSYSMENUTODEFAULT命令之后才顯示默認(rèn)的VisualFoxPro系統(tǒng)菜單。

說(shuō)明:

SETSYSMENU控制程序運(yùn)行期間的VisualFoxPro主菜單欄。它允許有選擇地移去VisualFoxPro主菜單系統(tǒng)中的菜單標(biāo)題和菜單,并可以將其恢復(fù)。

不帶其他參數(shù)的SETSYSMENUTO命令廢止VisualFoxPro主菜單欄。SETSYSMENU

命令的使用(4)類(lèi)的基本概念

類(lèi)的概念是由類(lèi)型和模塊相結(jié)合而產(chǎn)生的。一般地說(shuō),具有共同特征、狀態(tài)和行為的對(duì)象的集合稱(chēng)為類(lèi)。類(lèi)和對(duì)象是緊密相連的,類(lèi)是對(duì)象的模板,而單個(gè)對(duì)象是對(duì)應(yīng)類(lèi)的一個(gè)實(shí)例。如電話機(jī)是一個(gè)類(lèi),而某一部電話機(jī)是電話機(jī)類(lèi)的一個(gè)實(shí)例。命令按鈕是一個(gè)類(lèi),而某一個(gè)表單上的“確定”按鈕是命令按鈕的一個(gè)實(shí)例。

基類(lèi)(baseclass)是VisualFoxPro系統(tǒng)提供的內(nèi)部定義的類(lèi),可用作其他用戶(hù)自定義類(lèi)的基礎(chǔ)。如,表單和所有控件就是基類(lèi),可在此基礎(chǔ)上創(chuàng)建新類(lèi),增添自己需要的功能。

子類(lèi)(subclass)是以其他類(lèi)定義為起點(diǎn),為某一種對(duì)象所建立的新類(lèi)。子類(lèi)將繼承任何對(duì)父類(lèi)(即子類(lèi)所基于的類(lèi))所做的修改。

用戶(hù)自定義類(lèi)(user-definedclass)與VisualFoxPro基類(lèi)相似,但由用戶(hù)定義,并且可用來(lái)派生子類(lèi)。這種類(lèi)沒(méi)有可視表示形式。繼承性和多態(tài)性

繼承性(inheritance):說(shuō)明了子類(lèi)延用父類(lèi)特征的能力。如果父類(lèi)特征發(fā)生改變,則子類(lèi)將繼承這些新特征。例如將某標(biāo)簽的BackStyle屬性設(shè)置為0-透明,那么以此控件為基礎(chǔ)派生的子類(lèi)BackStyle屬性也為0-透明。繼承性體現(xiàn)并擴(kuò)充了面向?qū)ο蟪绦蛟O(shè)計(jì)方法的共享機(jī)制。

多態(tài)性(polymorphism):主要是指一些關(guān)聯(lián)的類(lèi)包含同名的方法程序,但方法程序的內(nèi)容可以不同。具體調(diào)用哪種方法程序在運(yùn)行時(shí)根據(jù)對(duì)象的類(lèi)確定。在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,多態(tài)性使得相同的操作可以作用于多種類(lèi)型的對(duì)象上并獲得不同的結(jié)果,從而增強(qiáng)了系統(tǒng)的靈活性、維護(hù)性、擴(kuò)充性等。封裝性和抽象性

封裝性(encapsulation):說(shuō)明包含和隱藏對(duì)象信息,如內(nèi)部數(shù)據(jù)結(jié)構(gòu)和代碼的能力。封裝將操作對(duì)象的內(nèi)部復(fù)雜性與應(yīng)用程序的其他部分隔離開(kāi)來(lái)。例如,當(dāng)對(duì)一個(gè)命令按鈕設(shè)置Caption(標(biāo)題)屬性時(shí),不必了解標(biāo)題字符串是如何存儲(chǔ)的。封裝和隱藏是面向?qū)ο蠹夹g(shù)的核心,使得軟件具有很好的模塊性,各模塊具有明顯的范圍和邊界,實(shí)現(xiàn)了模塊內(nèi)的高內(nèi)聚和模塊間的低耦合。

抽象性(abstraction):是指提取一個(gè)類(lèi)或?qū)ο笈c眾不同的特征,而不對(duì)該類(lèi)或?qū)ο蟮乃行畔⑦M(jìn)行處理。當(dāng)創(chuàng)建一個(gè)類(lèi)時(shí),例如一系列表的定位按鈕,可以將它作為整體,而不必關(guān)心其中的單個(gè)組件以及它們相互之間是如何作用的。VFP

的基類(lèi)

VFP提供了29種基類(lèi),按類(lèi)所創(chuàng)建的對(duì)象是否允許包含其它對(duì)象區(qū)分,有容器類(lèi)和控件類(lèi)兩種;按類(lèi)所創(chuàng)建的對(duì)象在運(yùn)行時(shí)是否能顯示來(lái)區(qū)分,有可視類(lèi)和不可視類(lèi)兩種。詳見(jiàn)VFP基類(lèi)表。各種容器類(lèi)中,表單集允許包含表單、工具欄;表單允許包含頁(yè)框、任意控件、容器;頁(yè)框允許包含頁(yè)面;頁(yè)面允許包含任何容器和控件;容器和控件允許包含任何控件;工具欄允許包含任何控件、容器、自定義對(duì)象;命令按鈕組允許包含命令按鈕;選項(xiàng)按鈕組允許包含選項(xiàng)按鈕;表格允許包含表格列;表格列允許包含標(biāo)題以及除表單集、表單、工具欄、計(jì)時(shí)器、標(biāo)題列以外的任意對(duì)象。VFP

基類(lèi)表控件類(lèi)容器類(lèi)復(fù)選框CheckBox列表框ListBox*表單集FormSet表單Form組合框ComboBox編輯框EditBox控件Control容器Container微調(diào)控件Spinner文本框TextBox表格Gord表格列Column*計(jì)時(shí)器Timer標(biāo)簽Lable*頁(yè)框PageFrame頁(yè)面Page形狀Space線條Line工具欄ToolBar*自定義Custom圖像Image標(biāo)頭Header命令按鈕組CommandGroup選項(xiàng)按鈕組OptionGroup命令按鈕CommandButton選項(xiàng)按鈕OptionButtonOLE容器控件OLEContainerControl注:表中標(biāo)有*號(hào)的為不可視類(lèi),其余為可視類(lèi)。OLE綁定型控件OLEboundcontrol分隔符Separator使用“類(lèi)設(shè)計(jì)器”創(chuàng)建新類(lèi)

打開(kāi)“類(lèi)設(shè)計(jì)器”的方法有以下三種:在“項(xiàng)目管理器”中選擇“類(lèi)”選項(xiàng)卡,點(diǎn)擊新建按鈕。打開(kāi)“新建”對(duì)話框,選擇“類(lèi)”,點(diǎn)擊新建文件按鈕。在命令窗口輸入CREATECLASS命令。使用上述方法將首先打開(kāi)“新類(lèi)”對(duì)話框,從中指定新類(lèi)的名稱(chēng)、新類(lèi)所基于的類(lèi)以及保存新類(lèi)的類(lèi)庫(kù)文件,點(diǎn)擊確定按鈕后,“類(lèi)設(shè)計(jì)器”被打開(kāi)。

“類(lèi)設(shè)計(jì)器”的用戶(hù)界面與“表單設(shè)計(jì)器”相同,在“屬性”窗口中可以編輯和查看類(lèi)的屬性,可以使用“表單控件”工具欄向新類(lèi)(指容器類(lèi))添加控件?!靶骂?lèi)”對(duì)話框“類(lèi)設(shè)計(jì)器”的用戶(hù)界面類(lèi)設(shè)計(jì)的其它問(wèn)題類(lèi)的修改、復(fù)制與刪除為類(lèi)添加對(duì)象為類(lèi)添加新屬性為類(lèi)添加新方法程序?yàn)轭?lèi)指定外觀覆蓋默認(rèn)屬性設(shè)置調(diào)用父類(lèi)方法程序代碼防止基類(lèi)代碼被執(zhí)行使用編程方式創(chuàng)建新類(lèi)

用戶(hù)既可以在“類(lèi)設(shè)計(jì)器”或“表單設(shè)計(jì)器”中可視地定義類(lèi),也可以在

.PRG文件中以編程方式定義類(lèi)。

用命令創(chuàng)建類(lèi)的格式如下:

DEFINECLASS<新類(lèi)名>As<基類(lèi)名>[[PRITECTED<屬性名1>,<屬性名2>…]<屬性名>=<表達(dá)式>…][ADDOBJECT[PROTECTED]<對(duì)象名>As<類(lèi)名2>[NOINIT][WITH

<屬性名表>]][PROTECTED]FUNCTION/PROCEDURE

<過(guò)程名>…[ENDFUNC/ENDPROC]]ENDEDFINE注:類(lèi)定義代碼必須放在其他程序代碼之后,而不能放在它們之前,放在類(lèi)定義之后的命令代碼不被執(zhí)行。

新類(lèi)的注冊(cè)執(zhí)行菜單命令工具→選項(xiàng)。在“選項(xiàng)”對(duì)話框的“控件”選項(xiàng)卡中選擇“可視類(lèi)庫(kù)”選項(xiàng)并單擊添加按鈕。在“打開(kāi)”對(duì)話框中輸入要注冊(cè)的新類(lèi)所在的類(lèi)庫(kù)名(例如,MYCLASS),單擊打開(kāi)按鈕。如要每次運(yùn)行VFP時(shí)自動(dòng)成為表單工具欄中的可用類(lèi)庫(kù),單擊設(shè)置為默認(rèn)值按鈕。單擊確定按鈕完成新類(lèi)的注冊(cè)。

要使用從VFP的基類(lèi)派生的新類(lèi),則必須在該新類(lèi)創(chuàng)建完成后進(jìn)行類(lèi)的注冊(cè),以便在表單向?qū)c表單設(shè)計(jì)器的表單控件工具欄中直接顯示,并可以像使用VFP的基類(lèi)一樣創(chuàng)建對(duì)象。注冊(cè)方法如下:“選項(xiàng)”對(duì)話框中的“控件”選項(xiàng)卡添加類(lèi)庫(kù)的“打開(kāi)”對(duì)話框新類(lèi)的使用

使用新建的類(lèi),可在“表單控件”工具欄中單擊查看類(lèi)按鈕,打開(kāi)一小菜單,從中選擇新建類(lèi)所在的類(lèi)庫(kù)(MYCLASS),則“表單控件”工具欄中即顯示MYCLASS類(lèi)庫(kù)中類(lèi)的圖標(biāo)。此時(shí),即可將新建的類(lèi)添加到表單、表單集、工具欄等容器類(lèi)控件中。如要恢復(fù)VFP的基類(lèi),可再單擊查看類(lèi)按鈕,從打開(kāi)的小菜單中選擇“常用”即可。表單控件工具欄中添加新類(lèi)圖示MYCLASS類(lèi)庫(kù)中新類(lèi)的圖標(biāo)類(lèi)的修改

VFP系統(tǒng)允許用戶(hù)對(duì)已存在的類(lèi)進(jìn)行修改。方法有:在“項(xiàng)目管理器”中:

選擇“文件”菜單中的“打開(kāi)”菜單項(xiàng):在命令窗口中使用命令:

MODIFYCLASS?[OF<類(lèi)庫(kù)文件名>]

進(jìn)入打開(kāi)類(lèi)庫(kù)文件對(duì)話框,后續(xù)操作同上述第2種方法。

進(jìn)入“類(lèi)設(shè)計(jì)器”后,與創(chuàng)建新類(lèi)類(lèi)似,可以對(duì)類(lèi)進(jìn)行修改操作。對(duì)類(lèi)的修改將影響所有的子類(lèi)和基于這個(gè)類(lèi)所創(chuàng)建的所有對(duì)象。如果類(lèi)已經(jīng)被應(yīng)用程序組件使用,就不能修改類(lèi)的Name屬性,否則,在執(zhí)行應(yīng)用程序時(shí)將找不到已被換名的類(lèi)。類(lèi)的復(fù)制

復(fù)制類(lèi)庫(kù)中的類(lèi)若想將類(lèi)從一個(gè)類(lèi)庫(kù)復(fù)制到另一個(gè)類(lèi)庫(kù)中,首先,必須要求兩個(gè)類(lèi)庫(kù)都在項(xiàng)目中,兩個(gè)類(lèi)庫(kù)可存放在不同的項(xiàng)目中。如果類(lèi)庫(kù)倘未添加到項(xiàng)目中,可以先選擇“項(xiàng)目管理器”中的“類(lèi)”選項(xiàng)卡,單擊“添加”按鈕,在“打開(kāi)”對(duì)話框中指定被選擇的類(lèi)庫(kù)文件名。選擇包含類(lèi)的類(lèi)庫(kù)左邊的“+”號(hào)。選定要復(fù)制的類(lèi),用鼠標(biāo)將類(lèi)從源類(lèi)庫(kù)拖到目標(biāo)類(lèi)庫(kù)中。詳見(jiàn)將項(xiàng)目文件Sht中存放在類(lèi)庫(kù)文件(MyTool.VCX)中的類(lèi)(mytoola1)復(fù)制到項(xiàng)目文件JXGL中類(lèi)庫(kù)文件(form.VCX

)中的示意圖。通常,將類(lèi)和基于這個(gè)類(lèi)的所有子類(lèi)都存放在一個(gè)類(lèi)庫(kù)文件中。否則,如果一個(gè)類(lèi)包含多個(gè)不同類(lèi)庫(kù)中的元件,那么在運(yùn)行時(shí)或設(shè)計(jì)時(shí),加載這個(gè)類(lèi)將花費(fèi)較長(zhǎng)的時(shí)間,因?yàn)?,包含?lèi)元件的類(lèi)庫(kù)必須全部打開(kāi)。因此,適當(dāng)?shù)膹?fù)制類(lèi)是必要的。類(lèi)復(fù)制的示意圖鼠標(biāo)拖動(dòng)類(lèi)的刪除

根據(jù)實(shí)際需要,對(duì)于不再使用的類(lèi)和類(lèi)庫(kù),可用“移去”操作將類(lèi)庫(kù)或類(lèi)庫(kù)中的類(lèi)刪除掉。刪除類(lèi)和類(lèi)庫(kù)操作較為簡(jiǎn)單。在“項(xiàng)目管理器”中選擇要?jiǎng)h去的類(lèi)或類(lèi)庫(kù),單擊“移去”按鈕,便可將類(lèi)或類(lèi)庫(kù)移去或刪除。刪除類(lèi)操作,也可以在命令窗口中,使用如下命令:

REMOVECLASS〈類(lèi)名〉OF〈類(lèi)庫(kù)文件名〉<類(lèi)名>表示從可視類(lèi)庫(kù)中需要?jiǎng)h除的類(lèi)定義的名字,它可能是其他類(lèi)的父類(lèi)。用<類(lèi)庫(kù)文件名>指定包含需要?jiǎng)h除的可視類(lèi)庫(kù)名。刪除類(lèi)操作要慎重,因?yàn)楸粍h除的類(lèi)可能是用于派生其他類(lèi)的父類(lèi),當(dāng)它被刪除時(shí),其他派生類(lèi)也將失去定義。

為類(lèi)添加對(duì)象

創(chuàng)建的新類(lèi),如果是控件類(lèi)或容器類(lèi),則可以向它添加對(duì)象(控件或容器)。實(shí)現(xiàn)時(shí),首先須打開(kāi)“類(lèi)設(shè)計(jì)器”,從“表單控件”工具欄中選擇所要添加的對(duì)象的按鈕,將它拖到“類(lèi)設(shè)計(jì)器”中,調(diào)整對(duì)象的大小,使其滿(mǎn)足要求。可以通過(guò)主菜單中“類(lèi)”菜單項(xiàng)中的“新屬性”和“新方法程序”為新類(lèi)設(shè)置屬性和編寫(xiě)方法程序的代碼。也可以單擊右鍵,從彈出的快捷菜單中選擇“屬性”和屬性窗口中的“方法程序”為新類(lèi)設(shè)置屬性和添加方法程序。為類(lèi)添加新屬性

雖然新建的類(lèi)繼承了父類(lèi)的屬性,但用戶(hù)還可以為其添加新的屬性。添加新屬性的方法是:⑴打開(kāi)“類(lèi)設(shè)計(jì)器”,執(zhí)行菜單命令類(lèi)→新建屬性。⑵在彈出的“新建屬性”對(duì)話框中,作如下操作:在“名稱(chēng)”欄內(nèi),輸入屬性的名稱(chēng)。在“可視性”欄內(nèi),指出可視性:公共、保護(hù)或隱蔽。在“說(shuō)明”欄內(nèi),填入有關(guān)屬性的說(shuō)明。因?yàn)?,在用?hù)設(shè)置新屬性時(shí),有可能輸入一些無(wú)效的設(shè)置,而造成運(yùn)行時(shí)出錯(cuò),在“說(shuō)明”中增加屬性的有效設(shè)置的說(shuō)明,以便其他用戶(hù)和用戶(hù)本身在引用該屬性的代碼中,檢驗(yàn)屬性值的有效性。單擊“添加”按鈕后,新的屬性就被添加到類(lèi)中?!靶陆▽傩浴睂?duì)話框“可視性”的含義

“新屬性”和“新方法程序”對(duì)話框中的“可視性”框中有三個(gè)選項(xiàng):公共、保護(hù)和隱蔽。其中,“公共”是默認(rèn)值,其含義是:可在對(duì)象設(shè)計(jì)時(shí)進(jìn)行修改。若屬性和方法程序設(shè)置為“保護(hù)”,則僅能被該類(lèi)定義內(nèi)的方法程序或該類(lèi)的派生類(lèi)(子類(lèi))所訪問(wèn),在由其產(chǎn)生的對(duì)象的屬性中,該屬性的值用斜體字顯示。若屬性和方法程序設(shè)置為“隱蔽”,則只能被該類(lèi)的定義內(nèi)成員所訪問(wèn),該類(lèi)的子類(lèi)不能引用它們。為確保類(lèi)設(shè)計(jì)時(shí)所擁有的正確功能,防止用戶(hù)使用編程時(shí)隨意改變屬性或從類(lèi)外調(diào)用方法程序,可以將類(lèi)的屬性和方法程序設(shè)置為隱藏。

為類(lèi)添加新方法程序與向類(lèi)添加新的屬性一樣,也可以向類(lèi)添加新的方法程序。方法程序所保存的是調(diào)用時(shí)可以運(yùn)行的過(guò)程代碼。添加新方法程序和添加新屬性的操作相似:

⑴打開(kāi)“類(lèi)設(shè)計(jì)器”,執(zhí)行菜單命令類(lèi)→新方法程序

⑵在彈出的“新方法程序”對(duì)話框中,作如下操作:在“名稱(chēng)”欄內(nèi),輸入方法程序的名稱(chēng);在“可視性”欄內(nèi),指出可視性:公共、保護(hù)或隱藏;在“說(shuō)明”欄內(nèi),可以加入有關(guān)方法程序的說(shuō)明;按下“添加”按鈕,新的方法程序被添加到類(lèi)中。

類(lèi)的屬性和方法不能賦予同一個(gè)名字。即已被使用過(guò)的屬性名或方法名不能再作為新的屬性名或方法程序名?!靶路椒ǔ绦颉睂?duì)話框?yàn)轭?lèi)指定外觀為類(lèi)指定外觀,是指用戶(hù)使用類(lèi)設(shè)計(jì)應(yīng)用程序時(shí),用來(lái)表示類(lèi)的圖標(biāo)。圖標(biāo)分為二種:工具欄圖標(biāo)和容器圖標(biāo)。1.設(shè)置工具欄圖標(biāo)的方法打開(kāi)“類(lèi)設(shè)計(jì)器”,執(zhí)行菜單命令類(lèi)→類(lèi)信息,在“類(lèi)信息”對(duì)話框的“工具欄圖標(biāo)”框中輸入.BMP文件的名稱(chēng)和路徑。把類(lèi)和工具欄一起放入類(lèi)庫(kù)后,工具欄圖標(biāo)將顯示在“表單控件”工具欄中。工具欄圖標(biāo)的.BMP文件必須是15*16像素點(diǎn)大小。若圖片過(guò)大或過(guò)小,圖形可能會(huì)發(fā)生變形。2.設(shè)置容器圖標(biāo)的方法通過(guò)設(shè)置容器圖標(biāo)可指定“類(lèi)瀏覽器”中類(lèi)的顯示圖標(biāo)。打開(kāi)“類(lèi)設(shè)計(jì)器”,執(zhí)行菜單命令類(lèi)→類(lèi)信息,在“類(lèi)信息”對(duì)話框的“容器圖標(biāo)”框中鍵入將在“表單控件”工具欄按鈕上顯示的.BMP文件名稱(chēng)和路徑。只有在VFP的專(zhuān)業(yè)版中才可以在“類(lèi)瀏覽器”中顯示容器圖標(biāo)?!邦?lèi)信息”對(duì)話框的“工具欄圖標(biāo)”框工具欄圖標(biāo)原有圖標(biāo)“表單控件”工具欄中顯示工具欄圖標(biāo)“類(lèi)信息”對(duì)話框的“容器圖標(biāo)”框“類(lèi)瀏覽器”窗口原有圖標(biāo)容器圖標(biāo)復(fù)蓋默認(rèn)屬性設(shè)置基于用戶(hù)自定義類(lèi)的對(duì)象被添加到表單后,可以修改創(chuàng)建對(duì)象中所有未被保護(hù)的屬性,來(lái)復(fù)蓋其默認(rèn)的屬性設(shè)置。表單運(yùn)行時(shí),表單中對(duì)象執(zhí)行用戶(hù)修改后的屬性設(shè)置。即以用戶(hù)定義的新屬性復(fù)蓋類(lèi)的默認(rèn)屬性值。即使在“類(lèi)設(shè)計(jì)器”中該屬性的值被修改,表單中的對(duì)象的屬性值也不會(huì)改變。如果,用戶(hù)在設(shè)計(jì)表單時(shí),對(duì)象的屬性設(shè)置沒(méi)有被修改,則在“類(lèi)設(shè)計(jì)器”中的屬性被修改時(shí),由類(lèi)所創(chuàng)建的對(duì)象的相關(guān)屬性將會(huì)改變。例如,在將一個(gè)基于類(lèi)的對(duì)象添加到表單中,并且,將該對(duì)象BackColor屬性從白色改變?yōu)辄S色。若再用“類(lèi)設(shè)計(jì)器”將類(lèi)的BackColor屬性改變?yōu)樘m色,用戶(hù)表單上的對(duì)象的BackColor屬性仍然是黃色。如果用戶(hù)在設(shè)計(jì)表單時(shí),沒(méi)有對(duì)創(chuàng)建對(duì)象的BackColor屬性作修改,而將類(lèi)的BackColor屬性改為蘭色,則表單上的創(chuàng)建對(duì)象將繼承這一修改,也改變?yōu)樘m色。

調(diào)用父類(lèi)方法程序代碼(1)子類(lèi)和對(duì)象自動(dòng)繼承基類(lèi)的功能。但同時(shí)用戶(hù)也可以用新的功能來(lái)替代繼承來(lái)的功能。例如,用戶(hù)把基于某個(gè)基類(lèi)的對(duì)象或由某個(gè)基類(lèi)派生出的子類(lèi)加到一個(gè)容器(如表單)中時(shí),重新為這個(gè)對(duì)象或子類(lèi)的Click事件編寫(xiě)程序代碼,在運(yùn)行時(shí),基類(lèi)的代碼不執(zhí)行,而執(zhí)行新的程序代碼。在較多的情況下,用戶(hù)希望在為新類(lèi)或?qū)ο筇砑有鹿δ艿耐瑫r(shí),仍然保留父類(lèi)的功能,這時(shí),用戶(hù)可以在類(lèi)或容器層次的各級(jí)程序代碼中使用函數(shù)DODEFAU()或作用域操作符(::)調(diào)用父類(lèi)的程序代碼。調(diào)用父類(lèi)方法程序代碼(2)例如,有表單類(lèi)MYFORMA中設(shè)置Click事件代碼為:

THISFORM.BackColor=RGB(0,0,255)&&藍(lán)色在基于FORMA類(lèi)創(chuàng)建的表單對(duì)象中,添加一個(gè)三個(gè)命令按鈕。第一個(gè)命令按鈕的Click事件代碼為:

THISFORM.BackColor=RGB(255,255,0)&&黃色第二個(gè)命令按鈕的Click事件代碼為:

THISFORM.BackColor=RGB(255,0,255)&&粉紅色第三個(gè)命令按鈕的Click事件代碼為:

MYFORMA::Click

當(dāng)運(yùn)行該表單時(shí),單擊第一個(gè)命令按鈕時(shí),表單背景為黃色;單擊第二個(gè)命令按鈕時(shí),表單背景為粉紅色;而單擊第三個(gè)命令按鈕時(shí),調(diào)用了父類(lèi)(MYFORMA)的方法程序代碼,表單背景為藍(lán)色。例如防止基類(lèi)代碼被執(zhí)行(1)

VFP的對(duì)象繼承父類(lèi)或基類(lèi)的所有屬性、事件和方法程序。但有時(shí)在事件和方法程序中希望防止發(fā)生基類(lèi)的默認(rèn)操作。例如,用戶(hù)使用文本框接收口令時(shí),希望鍵盤(pán)輸入的內(nèi)容在文本框內(nèi)不顯示,可以通過(guò)在方法程序代碼中加入NODEFAULT關(guān)鍵字來(lái)實(shí)現(xiàn)。

例如,設(shè)計(jì)一個(gè)表單,添加一個(gè)“文本框”對(duì)象來(lái)接收口令字。要求在輸入口令字時(shí),文本框中不顯示輸入內(nèi)容,而且每輸入一個(gè)A~Z以?xún)?nèi)的字符,就顯示一個(gè)“*”,A~Z之外的字符不接收,并把輸入的內(nèi)容存放到內(nèi)容變量_MM中。要實(shí)現(xiàn)以上功能,可按以下步驟操作:⑴創(chuàng)建一個(gè)表單對(duì)象,并在表單上添加一個(gè)文本框?qū)ο?;防止基?lèi)代碼被執(zhí)行(2)

⑵為表單的init事件編寫(xiě)代碼:

PUBLIC_MM&&定義全局變量_MM_MM=’’&&為_(kāi)MM賦初值空字符串⑶為文本框的KeyPress事件添加代碼:

PARAMETERSnKeyCode,nShiftAltCtrl

NODEFAULTIFBETWEEN(nKeyCode,65,90)&&輸入內(nèi)容只能在“A”~“Z”之間

This·Value=ALLTRIM(This·Value)+“*”&&用“*”替代輸入內(nèi)容顯示_MM=_MM+CHR(nKeycode)

endif

⑷為文本框的Destroy事件設(shè)置程序代碼:

CLEAREVENTS定義工具欄類(lèi)

創(chuàng)建用戶(hù)自定義工具欄,首先要在VFP提供的工具欄基類(lèi)基礎(chǔ)之上創(chuàng)建一個(gè)工具欄子類(lèi),而后向該工具欄子類(lèi)添加對(duì)象,并為其定義屬性、事件和方法程序。最后,在使用時(shí)還須將自定義工具欄添加到表單集中。自定義工具欄類(lèi)的操作與上節(jié)所述的類(lèi)設(shè)計(jì)的操作基本相同,只是在“新類(lèi)”對(duì)話框中的“派生于”欄中需選擇“Toolbar”基類(lèi)。

工具欄上的對(duì)象是用緊排方式排列在一起,當(dāng)向工具欄上添加了多個(gè)對(duì)象后,可以在對(duì)象之間添加Separater對(duì)象,使它們之間分隔一點(diǎn)距離。注意:不能添加表格控件到工具欄。現(xiàn)通過(guò)例題9.3.1說(shuō)明自定義工具欄的操作。用編程方式定義工具欄類(lèi)用戶(hù)除了可以在“類(lèi)設(shè)計(jì)器”中可視地定義自定義工具欄類(lèi)以外,還可以使用編程方式動(dòng)態(tài)地建立自定義工具欄。編程方式定義工具欄類(lèi)可在VFP系統(tǒng)的命令窗口中進(jìn)行的。即在命令窗口中用MODIFYCOMMAND命令建立應(yīng)用程序;在應(yīng)用程序中用DEFINE命令定義工具欄類(lèi);用ADDOBJECT命令添加對(duì)象;用PROCEDURE<事件名>命令為<事件名>定義方法程序。

用編程的方式創(chuàng)建一個(gè)自定義工具欄的方法見(jiàn)例題9.3.2。

為表單集添加工具欄類(lèi)

VFP系統(tǒng)允許在表單集中添加工具欄,使得在打開(kāi)表單集中的各個(gè)表單時(shí),工具欄也一起被打開(kāi)。VFP不能直接在某個(gè)表單中添加工具欄。如果想把工具欄添加到某個(gè)表單中,則必須將此表單成為表單集的成員。然后再把工具欄添加入表單集。將工具欄添加到表單集的操作方法有:1.使用“表單設(shè)計(jì)器”,在表單集中添加工具欄2.使用“項(xiàng)目管理器”,在表單集中添加工具欄3.使用事件代碼在表單集中添加工具欄類(lèi)【例9.3.1】創(chuàng)建一個(gè)自定義工具欄類(lèi),類(lèi)名為tbrFont,保存在類(lèi)庫(kù)文件MYTOOL.VCX中。工具欄中包含2個(gè)標(biāo)簽、1個(gè)組合框、1個(gè)微調(diào)框和3個(gè)命令按鈕。該工具欄可完成以下功能:設(shè)置活動(dòng)表單中活動(dòng)控件的文本內(nèi)容的字體格式:字體、字號(hào)、粗體、斜體和是否加下劃線。根據(jù)上述功能為相關(guān)控件編寫(xiě)事件代碼。工具欄的標(biāo)題(Caption屬性)為“字體格式工具欄”,其它對(duì)象的主要屬性設(shè)置見(jiàn)表9.3.1。【例9.3.2】用編程方式定義一個(gè)工具欄,其中包含兩個(gè)按鈕,當(dāng)單擊按鈕時(shí)將改變按鈕標(biāo)題的字體屬性。當(dāng)自定義工具欄對(duì)象創(chuàng)建時(shí),各個(gè)按鈕自動(dòng)地以設(shè)計(jì)時(shí)加入工具欄的順序顯示,而忽略原定的Top和Left屬性。當(dāng)自定義工具欄的大小改變時(shí),VFP系統(tǒng)將自動(dòng)調(diào)整每個(gè)按鈕的顯示方式。詳見(jiàn)應(yīng)用程序清單和程序運(yùn)行結(jié)果。自定義工具欄的例題分析例題9.3.1的自定義工具欄圖示控件名屬性名屬性值cbofontname(組合框)rowsourcearrfontrowsourcetype5-數(shù)組valuearrfontspnfontsize(微調(diào)框)keyboardhighvalue72keyboardlowvalue5spinnerhighvalue72.00spinnerlowvalue5.00value9控件名屬性名屬性值控件名屬性名屬性值cmdfontIcaptionIlabel1caption字體fontbold.T.label2caption字號(hào)fontItalic.T.cmdfontBcaptionBcmdfontUcaptionUfontbold.T.fontbold.T.表9.3.1fontunderline.T.組合框cbofontname的InteravtiveChage事件代碼:_screen.activeform.activecontrol.fontname=this.value微調(diào)框spnfontsize的InteravtiveChage事件代碼:_screen.activeform.activecontrol.fontsize=this.value命令按鈕cmdfontB的Click事件代碼:this.fontbold=!this.fontbold_screen.activefo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論