《Delphi程序設(shè)計》 教學(xué)課件 第6章_第1頁
《Delphi程序設(shè)計》 教學(xué)課件 第6章_第2頁
《Delphi程序設(shè)計》 教學(xué)課件 第6章_第3頁
《Delphi程序設(shè)計》 教學(xué)課件 第6章_第4頁
《Delphi程序設(shè)計》 教學(xué)課件 第6章_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第6章多窗體程序設(shè)計當(dāng)程序比較復(fù)雜時,往往需要將不同功能的程序模塊放置到不同的窗體中以便于管理,由此引出了多窗體程序設(shè)計問題。在Delphi系統(tǒng)設(shè)計中,多窗體程序有兩種形式,一種是由多個Form窗體實現(xiàn)的多窗體程序,窗體與窗體之間彼此沒有主從關(guān)系;另一種是由多文檔(Multiple

Document

Interface,MDI)窗體實現(xiàn)的多窗體程序。6.1多個Form窗體程序設(shè)計Delphi系統(tǒng)將程序功能劃分為若干子功能模塊,每個模塊放置在一個窗體中,進入不同窗體可以使用不同的程序功能。6.1.1創(chuàng)建多個窗體當(dāng)打開Delphi開發(fā)系統(tǒng)時,系統(tǒng)自動創(chuàng)建一個Form窗體,其FormStyle屬性值默認設(shè)

置為fsNormal,表示該窗體是一個普通窗體,與其他窗體之間沒有隸屬關(guān)系。多個Form窗體程序就是在一個程序中使用多個窗體共同實現(xiàn)整個程序的功能。New

Item對話框1.利用菜單生成多窗體(1)執(zhí)行File→New→Other命令,打開如下圖所示的New

Item對話框。(2)選擇Form圖標,單擊“OK”按鈕,即可

在當(dāng)前項目中添加一個名稱為Form2的窗體,

該窗體與Form1窗體在功能與特性上完全一致。通過這樣的方法,可以在項目中添加多個Form窗體。提示:也可執(zhí)行File→New→Form命令,直接向當(dāng)前項目添加一個新的窗體。2.利用代碼創(chuàng)建多窗體為了提高程序的靈活性,可以利用Create方法在項目中動態(tài)地添加窗體,其語法格式如下:對象:=對象類.Create(Self);其中,對象表示通過Create方法生成的新的對象,該對象由給定的對象類生成?!纠?-1】通過代碼創(chuàng)建一個與當(dāng)前窗體相同的窗體,并指定新窗體的名稱與標題。procedure

TForm1.FormClick(Sender:

TObject);varForm2:

TForm1;beginForm2:=TForm1.Create(self);Form2.Caption:="創(chuàng)建的窗口Form2";Form2.Width:=480;Form2.Height

:=

300;Form2.Show;end;程序運行效果如圖6-2所示?!纠?-1】程序運行效果提示:使用Create方法生成的新窗體功能與原有窗體功能相同,單擊新窗體,也可以再創(chuàng)建一個新窗體。6.1.2窗體操作創(chuàng)建好多個窗體后,可以顯示、隱藏、關(guān)閉某個或全部窗體。1)顯示窗體可以使用Show方法和ShowModel函數(shù)來顯示某個窗體,它們的格式分別如下:窗體名.Show;窗體名.ShowModal;Show方法與ShowModal函數(shù)的區(qū)別時,

使用Show方法顯示窗體稱為非模式顯示,可以在窗體之間任意切換;使用ShowModal函數(shù)顯示窗體稱為模式顯示,只能顯示指定的窗體,不能切換到其他窗體。2)隱藏窗體當(dāng)顯示一個窗體后,如果暫時不需要訪問該窗體,可以使用Hide方法將該窗體隱藏起來,當(dāng)需要訪問時再顯示出來。Hide方法的格式如下:窗體名.Hide;提示:將暫時不使用的窗體隱藏起來,可以提高程序運行的效率。【例6-2】編寫程序,在一個窗體中控制另一個窗體的顯示與隱藏狀態(tài)。操作步驟如下:執(zhí)行File→New→Form命令,在當(dāng)前項目中添加一個新的窗體Form2,其屬性值均取默認值。在Form1窗體中添加2個Button組件,將

Caption屬性分別設(shè)置為“顯示Form2”和“隱藏Form2”。執(zhí)行File→Use

Unit命令,彈出UseUnit,如下圖所示。選中Unit2單元,單擊OK按鈕,在Form1窗體中聲明Form2窗體。Use

Unit對話框(4)為“顯示Form2”按鈕的onclick事件添加如下代碼,控制Form2窗體的顯示。procedure

TForm1.Button1Click(Sender:

TObject);beginForm2.Show;end;(5)為“隱藏Form2”按鈕的onclick事件添加如下代碼,控制Form2窗體的隱藏。procedure

TForm1.Button2Click(Sender:

TObject);beginForm2.Hide;end;3)關(guān)閉窗體當(dāng)確定窗體不再使用后,應(yīng)關(guān)閉窗體,從而釋放該窗體占用的資源。在Delphi系統(tǒng)中,通常有兩種關(guān)閉窗體的形式。一種方式是單擊關(guān)閉按鈕,另一種是使用Close方法來關(guān)閉窗體,其格式如下:窗體名.Close;提示:當(dāng)關(guān)閉窗體時,由該窗體派生出的所有窗體也一同關(guān)閉。6.1.3多個窗體間的數(shù)據(jù)傳遞在多窗體程序中,各個窗體之間需要交換信息,在Delphi程序設(shè)計中通常使用公共變量來共享數(shù)據(jù)。在Delphi系統(tǒng)中,公共變量通常定義在程序單元中的接口變量處(Interface),在此處定義好變量后,其他窗體程序都可以通過引用的方式來調(diào)用這些變量。為了更好地管理公共變量,用戶往往在程序設(shè)計過程中創(chuàng)建一個獨立的Unit單元,用以定義所有的公共變量,供其它程序單元使用。下面給出定義公共變量的具體步驟。執(zhí)行File→New→Unit命令,在當(dāng)前項目中添加一個Unit程序單元,然后執(zhí)行File→Save

As命令,將其重命名為CommUnit.pas文件并保存。在CommUnit單元中按如下格式定義變量。unit

CommUnit;interface變量定義;implementationend.(3)當(dāng)某個程序單元需要使用公共變量時,執(zhí)

行File→Use

Unit命令,在Use

Unit對話框中選擇

CommUnit單元,單擊Ok按鈕即可。下面通過實例介紹如何使用公共變量在窗體之間傳遞傳遞數(shù)據(jù)?!纠?-3】設(shè)計一個成績錄入系統(tǒng),其包含一個“控制程序”主窗體、一個“錄入成績”主窗體和一個“計算成績”窗體。通過主窗體可以打開各個窗體以及退出程序?!颁浫氤绦颉贝绑w用于錄入語文、數(shù)學(xué)和外語課程的成績,錄入完畢后可返回主窗體?!坝嬎愠煽儭贝绑w用于計算總成績與平均成績,同樣也可以返回主窗體。操作步驟如下:(1)在Form1窗體中添加3個Button組件,設(shè)計如下圖(a)所示的程序界面。(2)執(zhí)行Form→New→Form命令,在當(dāng)前項

目中添加一個窗體,設(shè)計窗體的界面如下圖(b)所示。(a)“控制程序”主窗體(b)“錄入成績”窗體(c)“計算成績”窗體執(zhí)行Form→New→Form命令,在當(dāng)前項目添加一個窗體,設(shè)計界面如上圖(c)所示。執(zhí)行File→New→Unit命令,在當(dāng)前項目添加一個Unit單元,執(zhí)行如下代碼,在單元中聲明公共變量。unit

CommUnit;interfacevarchinese,

math,english

:integer;total,average:integer;implementationend.執(zhí)行File→Save

As命令,將該Unit單元命名為CommonUnit.pas并保存。選中“控制程序”窗體,執(zhí)行File→Use

Unit命令,在打開的Use

Unit對話框中選中Unit2單元,然后單擊OK按鈕,完成對Unit2單元的引用操作。(7)為“錄入成績”按鈕的onclick事件添加如下代碼,實現(xiàn)單擊“錄入成績”按鈕時打開

“錄入成績”窗體。procedure

TForm1.Button1Click(Sender:

TObject);beginForm2.ShowModal;end;(8)為“計算成績”按鈕的onclick事件添加如下代碼,實現(xiàn)單擊“計算成績”按鈕時能打開“計算成績”窗體。procedure

TForm1.Button2Click(Sender:

TObject);beginForm3.ShowModal;end;(9)為“退出系統(tǒng)”按鈕的onclick事件添加如下代碼,關(guān)閉程序。procedure

TForm1.Button3Click(Sender:

TObject);beginForm1.Close;end;(10)選中“錄入成績”窗體,執(zhí)行File→UseUnit命令,在Use

Unit對話框中選擇CommUnit單元。選中“返回”按鈕,在其onclick事件中添加如下代碼,實現(xiàn)錄入數(shù)據(jù)并返回控制窗體的功能。procedure

TForm2.Button1Click(Sender:

TObject);beginchinese

:=

StrToInt(Edit1.Text);math

:=

StrToInt(Edit2.Text);english

:=

StrToInt(Edit3.Text);Form2.Close;end;(11)選中“計算成績”窗體,執(zhí)行File→UseUnit命令,在Use

Unit對話框中選擇中

CommUnit單元。在該窗體的OnCreate事件中添加如下代碼:procedure

TForm3.FormShow(Sender:

TObject);beginEdit1.Text

:=IntToStr(Chinese

+

math

+

english);Edit2.Text

:=

FloatToStr((Chinese

+

math

+

english)

/

3);end;(12)為“返回”按鈕的onclick事件添加如下代碼,關(guān)閉“計算成績”窗體并返回控制窗體。procedure

TForm3.Button1Click(Sender:

TObject);beginForm3.Close;end;6.2多文檔程序設(shè)計上一節(jié)介紹了使用多個Form窗體進行多窗體程序的設(shè)計的方法。本節(jié)將著重介紹使用多文檔(Multiple

Document

Interface,MDI)窗體進行程序設(shè)計的方法。在多文檔程序中,每個程序界面與相關(guān)程序稱作一個文檔,一個窗體可以有多個文檔,可以在各個文檔之間切換和傳輸數(shù)據(jù)。6.2.1創(chuàng)建多個窗體多文檔程序中有兩種類型的窗體,分別是父窗體和子窗體。父窗體父窗體是程序的基礎(chǔ),一個多文檔程序只能有一個父窗體,所有的子窗體必須在父窗體中運行且受父窗體的控制,任何子窗體都不能超出父窗體的范圍。關(guān)閉父窗體時,其所有的子窗體同時被關(guān)閉。子窗體一個多文檔程序中可以有多個子窗體??梢栽谧哟绑w中添加組件,使其成為與程序進行交互的對象。在多文檔程序中,所有的子窗體都隸屬于一個父窗體,由父窗體控制,子窗體與父窗體共同實現(xiàn)程序的功能。6.2.2創(chuàng)建多個窗體在多文檔程序中,由父窗體統(tǒng)一管理所有的子窗體,如創(chuàng)建子窗體、獲取當(dāng)前活動子窗體的信息、與子窗體交換信息和關(guān)閉子窗體等。1.創(chuàng)建多文檔程序建立多文檔程序的方法很簡單。由于一個多文檔程序中一定有一個父窗體和至少一個子窗體,所以可以通過下面的步驟創(chuàng)建一個簡單的多文檔程序。(1)選中需要設(shè)置為父窗體的Form窗體,將其FormStyle屬性值設(shè)置為fsMDIForm。(2)執(zhí)行File→New→Form命令,在當(dāng)前項目中添加一個窗體Form2,將Form2窗體的FormStyle屬性設(shè)置為fsChild,表示將其設(shè)置為子窗體。至此,完成多文檔程序界面的設(shè)置,當(dāng)程序執(zhí)行時,可以得到下圖所示界面。MDI應(yīng)用程序界面2.創(chuàng)建子窗體如果希望多文檔程序啟動時僅顯示父窗體,由用戶決定何時打開子窗體,以及打開多少個子窗體,則需要通過代碼來控制子窗體的打開。一般,先在父窗體中添加菜單和工具欄,然后通過菜單或工具欄中的“新建”命令來新建一個子窗體?!纠?-4】創(chuàng)建一個MDI應(yīng)用程序,在父窗體中通過“新建”菜單來新建一個子窗體。操作步驟如下:(1)將當(dāng)前Form窗體的FormStyle屬性值設(shè)置為fsMDIForm。在當(dāng)前窗體中添加一個MainMenu組件,在該組件中添加一個“新建”菜單,并將窗體的MainMenu屬性設(shè)置為MainMenu組件。執(zhí)行File→New→Form命令,在當(dāng)前項目中添加一個窗體Form2,將Form2窗體的

FormStyle屬性設(shè)置為fsMDIChild。執(zhí)行View→Units命令或按Ctrl+F12快捷鍵,打開View

Unit對話框。在對話框中選中Project1項目(如下圖(b)所示),單擊OK按鈕,在打開的代碼編輯器中

添加Project單元的代碼,然后將代碼中創(chuàng)建子窗體的代碼設(shè)置為注釋,如下圖(a)所示。MDI應(yīng)用程序界面

MDI應(yīng)用程序界面說明:將Project1單元代碼中創(chuàng)建子窗體的代碼設(shè)置為注釋,可以使程序執(zhí)行時只打開父窗體而不會打開子窗體。(5)執(zhí)行File→Use

Unit命令,在彈出的UseUnit對話框中選則子窗體對應(yīng)的代碼單元Unit2,單擊OK按鈕,即可在父窗體中使用子窗體。(6)選中MainMenu組件中的“新建”菜單,

為其onclick事件添加如下代碼,實現(xiàn)創(chuàng)建子窗體的功能。procedure

TForm1.N1Click(Sender:

TObject);beginApplication.CreateForm(TForm2,Form2);end;程序運行效果如下同所示。【例6-4】程序運行效果3.管理子窗體多文檔程序中可以存在多個子窗體,為了更好地管理子窗體,Delphi系統(tǒng)為子窗體定義了多個參數(shù)。1)MDIChildCount屬性在父窗體中,可以訪問MDIChildCount屬性值來獲得子窗體的數(shù)目,其格式如下:Count:=主窗體.MDIChildCount;2)MDIChildren數(shù)組在創(chuàng)建子窗體時,系統(tǒng)會自動將該窗體作為數(shù)組元素保存在MDIChildren數(shù)組中。因此,父窗體可以通過下面的語句來訪問子窗體:父窗體.MDIChildren[i];該語句表示訪問父窗體中的第i+1個子窗體。例如,要將TForm2父窗體中的所有子窗體的Label屬性設(shè)置為This

is

a

test,可以使用下面的語句:For

i

:=

1

to

MDIChildCount

doTForm2(MDIChildren[

i

-

1]).Label.Caption

:=

‘This

is

atest’;3)ActiveMDIChild屬性在多文檔程序中,只能有一個子窗體為當(dāng)前活動窗體,將某個子窗體設(shè)置為當(dāng)前活動子窗體的語法格式如下:父窗體.ActiveMDIChild下面通過實例介紹如何在父窗體中控制子窗體?!纠?-5】編寫多文檔程序,在子窗體中創(chuàng)建

RichEdit組件,在父窗體中利用“當(dāng)前窗口”菜單項來設(shè)置當(dāng)前子窗體中文本的字體,使用“全部窗口”菜單項來設(shè)置所有子窗體中文本的字體。操作步驟如下:按照【例6-5】介紹的方法建立一個父窗體Form1和一個子窗體Form2。向Form1窗體添加一個FontDialog組件和一個MainMenu組件。設(shè)計父窗體菜單如下圖所示,并將Form1窗體中的MainMenu屬性設(shè)置為MainMenu組件的名稱。設(shè)計父窗體的菜單(4)執(zhí)行【例6-4】中的步驟(4)~(6)。(5)為“當(dāng)前窗口”菜單項的onclick事件添加如下代碼,設(shè)置當(dāng)前窗體中RichEdit組件中文本的字體。procedure

TForm1.N3Click(Sender:

TObject);beginFontDialog1.Execute;TForm2(ActiveMDIChild).RichEdit1.Font

:=FontDialog1.Font;end;(6)為“全部窗口”菜單項的onclick事件添加如下代碼,設(shè)置所有子窗體中RichEdit組件中字體的工作。procedure

TForm1.N4Click(Sender:

TObject);va

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論