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

下載本文檔

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

文檔簡介

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

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

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

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

菜單設(shè)計的概念

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

統(tǒng)

規(guī)

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

統(tǒng)

的創(chuàng)建

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

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

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

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

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

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

菜單項分組

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

結(jié)果

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

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

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

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

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

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

定制菜單項(1)

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

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

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

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

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

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

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

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

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

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

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

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

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

表:

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

菜單項標(biāo)題

子菜單標(biāo)題

訪問鍵

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

主菜單名

S

子菜單

MY_XTWH

用戶口令

P

命令:DOFORMPSWDTOMYPSD

分隔線

文件管理

F

命令:DOFORMFILT

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

I

命令:DOMYZAP

分隔線

系統(tǒng)維護

退出系統(tǒng)

E

過程:CLEAREVENTS、QUIT

N

子菜單

MY_SJCL

基本情況

C

命令:DOFORMJBQK

工資情況

G

命令:DOFORMGZQK

崗位情況

W

命令:DOFORMGWQK

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

部門情況

B

命令:DOFORMBMQK

統(tǒng)計

T

命令:DODULT

MY_TJ

查詢

X

命令:DODULT

MY_CX

打印

P

命令:DODULT

MY_DY

幫助

H

命令:DODULT

MY_BZ

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

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

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

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

2.運行菜單

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

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

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

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

語法:SETSYSMENUON|OFF|AUTOMATIC|TO[MenuList]|TO[MenuTitleList]|TO[DEFAULT]|SAVE|NOSAVE

參數(shù):

ON

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

OFF

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

主菜單欄。SETSYSMENU

命令的使用(1)

AUTOMATIC

使VisualFoxPro主菜單欄在程序執(zhí)行期間可見。可以訪問菜單欄,但菜單項是啟用還是廢止則取決于不同的命令。在VisualFoxPro中,默認設(shè)置是AUTOMATIC。

TO[MenuList]

TO[MenuTitleList]

指定VisualFoxPro

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

命令的使用(2)

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

SETSYSMENUTO_MFILE,_MWINDOW

使用RELEASEBAR可指定菜單中的可用菜單項。

TO[DEFAULT]

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

SAVE

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

命令的使用(3)

NOSAVE

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

說明:

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

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

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

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

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

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

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

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

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

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

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

的基類

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

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

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

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

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

.PRG文件中以編程方式定義類。

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

DEFINECLASS<新類名>As<基類名>[[PRITECTED<屬性名1>,<屬性名2>…]<屬性名>=<表達式>…][ADDOBJECT[PROTECTED]<對象名>As<類名2>[NOINIT][WITH

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

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

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

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

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

VFP系統(tǒng)允許用戶對已存在的類進行修改。方法有:在“項目管理器”中:

選擇“文件”菜單中的“打開”菜單項:在命令窗口中使用命令:

MODIFYCLASS?[OF<類庫文件名>]

進入打開類庫文件對話框,后續(xù)操作同上述第2種方法。

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

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

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

根據(jù)實際需要,對于不再使用的類和類庫,可用“移去”操作將類庫或類庫中的類刪除掉。刪除類和類庫操作較為簡單。在“項目管理器”中選擇要刪去的類或類庫,單擊“移去”按鈕,便可將類或類庫移去或刪除。刪除類操作,也可以在命令窗口中,使用如下命令:

REMOVECLASS〈類名〉OF〈類庫文件名〉<類名>表示從可視類庫中需要刪除的類定義的名字,它可能是其他類的父類。用<類庫文件名>指定包含需要刪除的可視類庫名。刪除類操作要慎重,因為被刪除的類可能是用于派生其他類的父類,當(dāng)它被刪除時,其他派生類也將失去定義。

為類添加對象

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

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

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

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

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

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

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

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

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

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

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

MYFORMA::Click

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

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

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

⑵為表單的init事件編寫代碼:

PUBLIC_MM&&定義全局變量_MM_MM=’’&&為_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定義工具欄類

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

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

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

為表單集添加工具欄類

VFP系統(tǒng)允許在表單集中添加工具欄,使得在打開表單集中的各個表單時,工具欄也一起被打開。VFP不能直接在某個表單中添加工具欄。如果想把工具欄添加到某個表單中,則必須將此表單成為表單集的成員。然后再把工具欄添加入表單集。將工具欄添加到表單集的操作方法有:1.使用“表單設(shè)計器”,在表單集中添加工具欄2.使用“項目管理器”,在表單集中添加工具欄3.使用事件代碼在表單集中添加工具欄類【例9.3.1】創(chuàng)建一個自定義工具欄類,類名為tbrFont,保存在類庫文件MYTOOL.VCX中。工具欄中包含2個標(biāo)簽、1個組合框、1個微調(diào)框和3個命令按鈕。該工具欄可完成以下功能:設(shè)置活動表單中活動控件的文本內(nèi)容的字體格式:字體、字號、粗體、斜體和是否加下劃線。根據(jù)上述功能為相關(guān)控件編寫事件代碼。工具欄的標(biāo)題(Caption屬性)為“字體格式工具欄”,其它對象的主要屬性設(shè)置見表9.3.1?!纠?.3.2】用編程方式定義一個工具欄,其中包含兩個按鈕,當(dāng)單擊按鈕時將改變按鈕標(biāo)題的字體屬性。當(dāng)自定義工具欄對象創(chuàng)建時,各個按鈕自動地以設(shè)計時加入工具欄的順序顯示,而忽略原定的Top和Left屬性。當(dāng)自定義工具欄的大小改變時,VFP系統(tǒng)將自動調(diào)整每個按鈕的顯示方式。詳見應(yīng)用程序清單和程序運行結(jié)果。自定義工具欄的例題分析例題9.3.1的自定義工具欄圖示控件名屬性名屬性值cbofontname(組合框)rowsourcearrfontrowsourcetype5-數(shù)組valuearrfontspnfontsize(微調(diào)框)keyboardhighvalue72keyboardlowvalue5spinnerhighvalue72.00spinnerlowvalue5.00value9控件名屬性名屬性值控件名屬性名屬性值cmdfontIcaptionIlabel1caption字體fontbold.T.label2caption字號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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論