?? 012.htm
字號:
<p>Notebook1.PageIndex := TabSet1.TabIndex;</p><p><font face="宋體" lang="ZH-CN">…</font></p><p>end; </p><p><font face="宋體" lang="ZH-CN"> 設計靜態</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>Objectinspector<font face="宋體" lang="ZH-CN">窗體中雙擊</font>TNotebook<fontface="宋體" lang="ZH-CN">的</font>Pages<font face="宋體" lang="ZH-CN">屬性,</font>Dephi<font face="宋體" lang="ZH-CN">將彈出對話框,用戶可以在此確定</font>Notebook<fontface="宋體" lang="ZH-CN">的頁數和字符串列表,如圖</font>4.6<fontface="宋體" lang="ZH-CN">。關閉對話框后,</font> <font face="宋體"lang="ZH-CN">可對每一頁進行設計,使用鼠標右按鈕彈出快速菜單進行頁面切換。</font></p><p>4.2.2 <font face="宋體" lang="ZH-CN">動態多頁面界面 </p><p> 使用</font>Delphi<font face="宋體" lang="ZH-CN">進行靜態</font>MPI<fontface="宋體" lang="ZH-CN">設計非常簡單,進行動態</font>MPI<font face="宋體"lang="ZH-CN">設計則需編寫專門的代碼。</font> <font face="宋體" lang="ZH-CN">對</p><p>于一個多頁面文本編輯器,應能實現以下功能:</p><p> ●</font> <font face="宋體" lang="ZH-CN">動態生成頁面,每個頁面均能進行文本編輯</p><p> ●</font> <font face="宋體" lang="ZH-CN">動態關閉頁面,直到窗體中只有一個頁面為止</p><p> ●</font> <font face="宋體" lang="ZH-CN">頁面切換不影響各種文本編輯操作 </p><p> 為了實現以上功能,程序中使用了動態頁面類</font>(TDynaPage)<fontface="宋體" lang="ZH-CN">,其定義如下: </p><p> </font>type TDynaPage = Class(TObject); </p><p><font face="宋體" lang="ZH-CN">該類可根據需要動態的產生頁面,</font> <fontface="宋體" lang="ZH-CN">每個頁面上創建了可進行文本編輯的</font>TMeno<fontface="宋體" lang="ZH-CN">部件。 </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">表示當前用戶選擇的頁面數,用戶切換、增加、刪除頁面均影響</font>CurPage<font face="宋體" lang="ZH-CN">的值,</font>CurPage<font face="宋體" lang="ZH-CN">初如化為零頁。</font>FileList<fontface="宋體" lang="ZH-CN">存放打開或創建文件的名字以及與這些文件相關的編輯部件</font>TMemo<fontface="宋體" lang="ZH-CN">,頁面動態創建、刪除將影響</font>FilstList<fontface="宋體" lang="ZH-CN">的值。</p><p> </font>TNotebook<font face="宋體" lang="ZH-CN">部件創建后至少有一個頁面,因此</font>Pages<fontface="宋體" lang="ZH-CN">屬性不是空值,只要往</font>Pages<font face="宋體"lang="ZH-CN">中加入字符串,</font>Delphi<font face="宋體" lang="ZH-CN">自動地把該字符串與</font>TPage<fontface="宋體" lang="ZH-CN">類對象相聯系。</font>TPage<font face="宋體"lang="ZH-CN">類是</font>TCustomEdit<font face="宋體" lang="ZH-CN">派生出來的,在對象瀏覽器</font>(ObjectBrowse)<font face="宋體" lang="ZH-CN">中可觀察到</font>TPage<font face="宋體"lang="ZH-CN">的數據成員和方法。靜態生成的頁面也是</font> TPage<fontface="宋體" lang="ZH-CN">類。</p><p> 要創建多頁面編輯器,必須從</font>TPage<font face="宋體"lang="ZH-CN">的父件</font>(Parent<font face="宋體" lang="ZH-CN">屬件</font>)<fontface="宋體" lang="ZH-CN">創建相應編輯部件。但在動態創建頁面時,</font>TPage<fontface="宋體" lang="ZH-CN">只是一個與字符串相聯系的</font>TObject<fontface="宋體" lang="ZH-CN">類,不能寫成: </p><p> </font>MemoParent := Notebook1.Pages.Object[ ]; </p><p><font face="宋體" lang="ZH-CN">在</font>Delphi<font face="宋體" lang="ZH-CN">中,宣稱對象和創建對象都是用指針來標識,</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">上動態創建編輯部件了。</p><p> 往</font>Notebook1<font face="宋體" lang="ZH-CN">中動態生成頁面時,頁面應所相應的切換,</font>TDynaPage.Notebook1.Tabset1<font face="宋體" lang="ZH-CN">有關的屬性要作相應的調整。</font></p><p> TDynaPage<fontface="宋體" 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> 當用戶在多個頁面中進行切換時,程序應當保證對當前頁面進行編輯。</font><font face="宋體" lang="ZH-CN">例如在多頁編輯器中,用戶選中某一頁面,即可對該頁面中的文件進行編輯、尋找、設置、打印等。為了實現這一功能,定義了一個</font>TMemo<fontface="宋體" lang="ZH-CN">類型的變量:</font>Memo1,<font face="宋體" lang="ZH-CN">該變量沒有實例化,每次調用</font>DynaAdd,DynaDel<fontface="宋體" lang="ZH-CN">方法均定把</font>TabIndex<font face="宋體" lang="ZH-CN">指定頁面的</font>Memo<fontface="宋體" lang="ZH-CN">指針傳給</font>Memo1<font face="宋體" lang="ZH-CN">。這樣在程序運行中,始終有一個實例化的</font>Memo<fontface="宋體" lang="ZH-CN">指針賦給</font>Memo1<font face="宋體" lang="ZH-CN">,而菜單中的文本編輯功能均對</font>Memo1<fontface="宋體" lang="ZH-CN">進行操作。這種指針傳遞就能保證對當前頁進行操作。</p><p> 定義了</font>TDynaPage<font face="宋體" lang="ZH-CN">后,只需在</font>Open,Close<fontface="宋體" lang="ZH-CN">菜單項中加入如下代碼,即可方便的在用戶打開關閉文件時創建成刪除頁面。 </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">文本編輯部件及應用 </p></font><p>4.3.1 TEdit <font face="宋體" lang="ZH-CN">部件 </p></font><p> TEdit<font face="宋體" lang="ZH-CN">部件是一個標準的編輯框,用戶可在編輯框中輸入數據。編輯框也可向用戶顯示數據。編輯時只能讀寫一行信息。</p><p> </font> TEdit<font face="宋體" lang="ZH-CN">的</font>Text<font face="宋體"lang="ZH-CN">屬性存放著用戶輸入的數據或向用戶顯示的數據,</font>Modified<fontface="宋體" lang="ZH-CN">屬性用以標識</font> Text<font face="宋體" lang="ZH-CN">的數據是否改變,可通過設置</font>Maxlength<fontface="宋體" lang="ZH-CN">屬性值來限制用戶輸入字符的個數量,</font>CharCase</p><p><font face="宋體" lang="ZH-CN"> 屬性可定義編輯框中字符的大小寫。如果設計者想禁止用戶輸入,可將</font>ReadOnly<fontface="宋體" lang="ZH-CN">屬性設置成真值。編輯框也能用做密碼輸入框。通過設置</font>PassWordChar
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -