?? 012.htm
字號:
<p><font face="宋體" lang="ZH-CN">
設(shè)計靜態(tài)</font>MPI<font face="宋體"
lang="ZH-CN">時,可在部件窗體</font>(Component Palette)<font face="宋體"
lang="ZH-CN">的</font>WIN3<font face="宋體" lang="ZH-CN">。</font>1<font face="宋體"
lang="ZH-CN">頁面中選中</font>TNotebook <font face="宋體" lang="ZH-CN">部件,然后在</font>Object
inspector<font face="宋體" lang="ZH-CN">窗體中雙擊</font>TNotebook<font
face="宋體" lang="ZH-CN">的</font>Pages<font face="宋體" lang="ZH-CN">屬性,</font>Dephi
<font face="宋體" lang="ZH-CN">將彈出對話框,用戶可以在此確定</font>Notebook<font
face="宋體" lang="ZH-CN">的頁數(shù)和字符串列表,如圖</font>4.6<font
face="宋體" lang="ZH-CN">。關(guān)閉對話框后,</font> <font face="宋體"
lang="ZH-CN">可對每一頁進行設(shè)計,使用鼠標(biāo)右按鈕彈出快速菜單進行頁面切換。</font></p>
<p>4.2.2 <font face="宋體" lang="ZH-CN">動態(tài)多頁面界面 </p>
<p> 使用</font>Delphi<font face="宋體" lang="ZH-CN">進行靜態(tài)</font>MPI<font
face="宋體" lang="ZH-CN">設(shè)計非常簡單,進行動態(tài)</font>MPI<font face="宋體"
lang="ZH-CN">設(shè)計則需編寫專門的代碼。</font> <font face="宋體" lang="ZH-CN">對</p>
<p>于一個多頁面文本編輯器,應(yīng)能實現(xiàn)以下功能:</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">動態(tài)生成頁面,每個頁面均能進行文本編輯</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">動態(tài)關(guān)閉頁面,直到窗體中只有一個頁面為止</p>
<p> ●</font> <font face="宋體" lang="ZH-CN">頁面切換不影響各種文本編輯操作 </p>
<p> 為了實現(xiàn)以上功能,程序中使用了動態(tài)頁面類</font>(TDynaPage)<font
face="宋體" lang="ZH-CN">,其定義如下: </p>
<p> </font>type TDynaPage = Class(TObject); </p>
<p><font face="宋體" lang="ZH-CN">該類可根據(jù)需要動態(tài)的產(chǎn)生頁面,</font> <font
face="宋體" lang="ZH-CN">每個頁面上創(chuàng)建了可進行文本編輯的</font>TMeno<font
face="宋體" lang="ZH-CN">部件?!?lt;/p>
<p> </font>procedure... </p>
<font face="宋體" lang="ZH-CN"><p> </font> puclic</p>
<p>CurPage : integer;</p>
<p>FileList : TSringList;</p>
<p>end; </p>
<p> CurPage<font face="宋體" lang="ZH-CN">表示當(dāng)前用戶選擇的頁面數(shù),用戶切換、增加、刪除頁面均影響</font>CurPage
<font face="宋體" lang="ZH-CN">的值,</font>CurPage<font face="宋體" lang="ZH-CN">初如化為零頁。</font>FileList<font
face="宋體" lang="ZH-CN">存放打開或創(chuàng)建文件的名字以及與這些文件相關(guān)的編輯部件</font>TMemo<font
face="宋體" lang="ZH-CN">,頁面動態(tài)創(chuàng)建、刪除將影響</font>FilstList<font
face="宋體" lang="ZH-CN">的值。</p>
<p> </font>TNotebook<font face="宋體" lang="ZH-CN">部件創(chuàng)建后至少有一個頁面,因此</font>Pages<font
face="宋體" lang="ZH-CN">屬性不是空值,只要往</font>Pages<font face="宋體"
lang="ZH-CN">中加入字符串,</font>Delphi<font face="宋體" lang="ZH-CN">自動地把該字符串與</font>TPage<font
face="宋體" lang="ZH-CN">類對象相聯(lián)系。</font>TPage<font face="宋體"
lang="ZH-CN">類是</font>TCustomEdit<font face="宋體" lang="ZH-CN">派生出來的,在對象瀏覽器</font>(Object
Browse)<font face="宋體" lang="ZH-CN">中可觀察到</font>TPage<font face="宋體"
lang="ZH-CN">的數(shù)據(jù)成員和方法。靜態(tài)生成的頁面也是</font> TPage<font
face="宋體" lang="ZH-CN">類。</p>
<p> 要創(chuàng)建多頁面編輯器,必須從</font>TPage<font face="宋體"
lang="ZH-CN">的父件</font>(Parent<font face="宋體" lang="ZH-CN">屬件</font>)<font
face="宋體" lang="ZH-CN">創(chuàng)建相應(yīng)編輯部件。但在動態(tài)創(chuàng)建頁面時,</font>TPage<font
face="宋體" lang="ZH-CN">只是一個與字符串相聯(lián)系的</font>TObject<font
face="宋體" lang="ZH-CN">類,不能寫成: </p>
<p> </font>MemoParent := Notebook1.Pages.Object[ ]; </p>
<p><font face="宋體" lang="ZH-CN">在</font>Delphi<font face="宋體" lang="ZH-CN">中,宣稱對象和創(chuàng)建對象都是用指針來標(biāo)識,</font>
<font face="宋體" lang="ZH-CN">因此可用無類型指針進行指針傳遞。 </p>
<p> </font>var</p>
<p>Pi : Pointer;</p>
<p>begin</p>
<p>Pi := Notebook1.Pages.Object[];</p>
<p>Memo.Parent := Pi;</p>
<p>end; </p>
<p><font face="宋體" lang="ZH-CN">這樣就可在</font>TPage<font face="宋體"
lang="ZH-CN">上動態(tài)創(chuàng)建編輯部件了。</p>
<p> 往</font>Notebook1<font face="宋體" lang="ZH-CN">中動態(tài)生成頁面時,頁面應(yīng)所相應(yīng)的切換,</font>TDynaPage.
Notebook1.Tabset1<font face="宋體" lang="ZH-CN">有關(guān)的屬性要作相應(yīng)的調(diào)整。</font></p>
<p> TDynaPage<font
face="宋體" lang="ZH-CN">的</font>DynaAdd<font face="宋體" lang="ZH-CN">方法定義如下: </p>
</font><p>procedure TDynaPage.DynaAdd(Sender:TNotebook;FileName:String);</p>
<p>var</p>
<p>Pi:Pointer;</p>
<p>Memo:TMemo;</p>
<p>begin</p>
<p>Sender.Pages.add(FileName);</p>
<p>Pi:= Sender.Pages.Objects[Sender.Pages.Count-1];</p>
<p>DynaMemo(pi);</p>
<p>DynaPage.FileList.addObject(FileName,Memo1);</p>
<p>EditForm.TabSet1.Tabs := Sender.Pages;</p>
<p>EditForm.Tabset1.TabIndex:=Sender.Pages.Count-1;</p>
<p>EditForm.Notebook1.PageIndex := EditForm.Tabset1.TabIndex;</p>
<p>DynaPage.CurPage:= Sender.Pages.Count-1;</p>
<p>end; </p>
<p>procedure DynaMemo(Pi:Pointer);</p>
<p>var</p>
<p>Memo:TMemo;</p>
<p>begin</p>
<p>Memo:=TMemo.Create(Pi);</p>
<p>Memo.Parent:=Pi;</p>
<p>Memo.Align:=alClient;</p>
<p>Memo.borderStyle:=bsNone;</p>
<p>Memo.HideSelection:=False;</p>
<p>Memo1:=Memo;</p>
<p>end;</p>
<p>procedure TDynaPage.Del(Sender:TNotebook;No:integer); </p>
<p>var</p>
<p>Pi:pointer;</p>
<p>begin</p>
<p>Sender.Pages.delete(No);</p>
<p>EditForm.TabSet1.Tabs.delete(No);</p>
<p>Filelist.Delete(No);</p>
<p>DynaPage.CurPage:=EditForm.TabSet1.TabIndex;</p>
<p>Sender.PageIndex := EditForm.Tabset1.TabIndex;</p>
<p>Pi:=FileList.Objects[DynaPage.CurPage];</p>
<p>Memo1:=Pi;</p>
<p>EditForm.Caption:=Sender.Pages.Strings[DynaPage.CurPage];</p>
<p>end;</p>
<font face="宋體" lang="ZH-CN"><p> 當(dāng)用戶在多個頁面中進行切換時,程序應(yīng)當(dāng)保證對當(dāng)前頁面進行編輯。</font>
<font face="宋體" lang="ZH-CN">例如在多頁編輯器中,用戶選中某一頁面,即可對該頁面中的文件進行編輯、尋找、設(shè)置、打印等。為了實現(xiàn)這一功能,定義了一個</font>TMemo<font
face="宋體" lang="ZH-CN">類型的變量:</font>Memo1,<font face="宋體" lang="ZH-CN">該變量沒有實例化,每次調(diào)用</font>DynaAdd,DynaDel<font
face="宋體" lang="ZH-CN">方法均定把</font>TabIndex<font face="宋體" lang="ZH-CN">指定頁面的</font>Memo<font
face="宋體" lang="ZH-CN">指針傳給</font>Memo1<font face="宋體" lang="ZH-CN">。這樣在程序運行中,始終有一個實例化的</font>Memo<font
face="宋體" lang="ZH-CN">指針賦給</font>Memo1<font face="宋體" lang="ZH-CN">,而菜單中的文本編輯功能均對</font>Memo1<font
face="宋體" lang="ZH-CN">進行操作。這種指針傳遞就能保證對當(dāng)前頁進行操作。</p>
<p> 定義了</font>TDynaPage<font face="宋體" lang="ZH-CN">后,只需在</font>Open,Close<font
face="宋體" lang="ZH-CN">菜單項中加入如下代碼,即可方便的在用戶打開關(guān)閉文件時創(chuàng)建成刪除頁面?!?lt;/p>
<p> </font>procedure TEditForm.Close1Click(Sender: TObject);</p>
<p>begin </p>
<p>if DynaPage.CurPage<>0 then</p>
<p>DynaPage.Del(Notebook1,DynaPage.CurPage);</p>
<p>if Notebook1.Pages.count = 1 then</p>
<p>Close1.Enabled:=False;</p>
<p>end; </p>
<p>procedure TEditForm.Open1Click(Sender: TObject);</p>
<p>begin</p>
<p>if OpenDialog1.Execute then</p>
<p>begin</p>
<p>if not(OpenFile or NewFile) then</p>
<p>begin</p>
<p>OpenFile:=true;</p>
<p>Open(OpenDialog1.FileName);</p>
<p>Notebook1.Pages.Strings[0]:=ExtractFileName( OpenDialog1.FileName);</p>
<p>TabSet1.Tabs:=Notebook1.Pages;</p>
<p>end</p>
<p>else</p>
<p>begin</p>
<p>DynaPage.DynaAdd( Notebook1, ExtractFileName(OpenDialog1.FileName));</p>
<p>Open(OpenDialog1.Filename);</p>
<p>if Notebook1.Pages.count > 1 then</p>
<p>Close1.Enabled:=True;</p>
<p>end;</p>
<p>end;</p>
<p>end; </p>
<p>4.3 <font face="宋體" lang="ZH-CN">文本編輯部件及應(yīng)用 </p>
</font><p>4.3.1 TEdit <font face="宋體" lang="ZH-CN">部件 </p>
</font><p> TEdit<font face="宋體" lang="ZH-CN">部件是一個標(biāo)準(zhǔn)的編輯框,用戶可在編輯框中輸入數(shù)據(jù)。編輯框也可向用戶顯示數(shù)據(jù)。編輯時只能讀寫一行信息。</p>
<p> </font> TEdit<font face="宋體" lang="ZH-CN">的</font>Text<font face="宋體"
lang="ZH-CN">屬性存放著用戶輸入的數(shù)據(jù)或向用戶顯示的數(shù)據(jù),</font>Modified<font
face="宋體" lang="ZH-CN">屬性用以標(biāo)識</font> Text<font face="宋體" lang="ZH-CN">的數(shù)據(jù)是否改變,可通過設(shè)置</font>Maxlength<font
face="宋體" lang="ZH-CN">屬性值來限制用戶輸入字符的個數(shù)量,</font>CharCase</p>
<p><font face="宋體" lang="ZH-CN">
屬性可定義編輯框中字符的大小寫。如果設(shè)計者想禁止用戶輸入,可將</font>ReadOnly<font
face="宋體" lang="ZH-CN">屬性設(shè)置成真值。編輯框也能用做密碼輸入框。通過設(shè)置</font>PassWordChar
<font face="宋體" lang="ZH-CN">屬性的值,可將用戶輸入的字符在編輯框中顯示成指定的字符,如</font>"*"<font
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -