當用戶在多個頁面中進行切換時,程序應當保證對當前頁面進行編輯。 例如在多頁編輯器中,用戶選中某一頁面,即可對該頁面中的文件進行編輯、尋找、設置、打印等。為了實現這一功能,定義了一個TMemo類型的變量:Memo1,該變量沒有實例化,每次調用DynaAdd,DynaDel方法均定把TabIndex指定頁面的Memo指針傳給Memo1。這樣在程序運行中,始終有一個實例化的Memo指針賦給Memo1,而菜單中的文本編輯功能均對Memo1進行操作。這種指針傳遞就能保證對當前頁進行操作。
定義了TDynaPage後,只需在Open,Close菜單項中加入如下代碼,即可方便的在用戶打開關閉文件時創建成刪除頁面。
procedure TEditForm.Close1Click(Sender: TObject);
begin
if DynaPage.CurPage<>0 then
DynaPage.Del(Notebook1,DynaPage.CurPage);
if Notebook1.Pages.count = 1 then
Close1.Enabled:=False;
end;
procedure TEditForm.Open1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
if not(OpenFile or NewFile) then
begin
OpenFile:=true;
Open(OpenDialog1.FileName);
Notebook1.Pages.Strings[0]:=ExtractFileName( OpenDialog1.FileName);
TabSet1.Tabs:=Notebook1.Pages;
end
else
begin
DynaPage.DynaAdd( Notebook1, ExtractFileName(OpenDialog1.FileName));
Open(OpenDialog1.Filename);
if Notebook1.Pages.count > 1 then
Close1.Enabled:=True;
end;
end;
end;
4.3 文本編輯部件及應用
4.3.1 TEdit 部件
TEdit部件是一個標准的編輯框,用戶可在編輯框中輸入數據。編輯框也可向用戶顯示數據。編輯時只能讀寫一行信息。
TEdit的Text屬性存放著用戶輸入的數據或向用戶顯示的數據,Modified屬性用以標識 Text的數據是否改變,可通過設置Maxlength屬性值來限制用戶輸入字符的個數量,CharCase
屬性可定義編輯框中字符的大小寫。如果設計者想禁止用戶輸入,可將ReadOnly屬性設置成真值。編輯框也能用做密碼輸入框。通過設置PassWordChar 屬性的值,可將用戶輸入的字符在編輯框中顯示成指定的字符,如"*"號等。編輯框還可以進行字符選擇操作、粘貼、復制和剪切操作。
4.3.2 TMemo 部件
TMemo部件與TEdit部件類似,能向用戶顯示數據,用戶也可輸入數據。與TEdit 部件
不同的是,TMemo部件可以處理多行文本,因此主要用於編輯文件。
TMemo的Text屬性只能在運行時才能訪問。Modified屬性用以標識Text的數據是否改
變,通過設置MaxLength屬性值來限制用戶輸入字符的數量。
如果把文本當成一個整體進行訪問,可使用Text屬性;若想逐行訪問,則要使用Lines屬性。Lines屬性能對文件更方便地進行訪問。Lines是TStrings類型的,因此可使用Add 、Delete方法,例如在Memo1中加入一行字符串的代碼如下:
Memo1.Lines.Add('Another line is added');
通過Lines屬性可以方便地把文件讀入部件中,例程中使用下面的代碼將文件讀入Memo1:
Memo1.Lines.loadFromFile(Filename).
從TMemo 部件中剪切、復制、粘貼文本非常方便,只需使用 CutToclipboard ,CopyToClipBroad,PasteFromClipBoard方法,其代碼如下:
Memo1.CopyToClipboard
Memo1.CutToClipboard
Memo1.PasteFromClipboard
TMemo有一些屬性,用以控制文本的顯示效果。ScrollBars屬性可以定義部件的水平滾動條和垂直滾動條。當文件字體改變時,使用AutoSize屬性可使部件大小做相應的調整。設置WordWrap屬性可以實現自動換行。
例程中Edit|WordWrap菜單項提供了設置WordWrap的功能,並可根據WordWrap的值決定滾動條的形式。當WordWrap為真時,不需要水平滾動條, 並在菜單中作出檢查記號。
其代碼如下:
procedure TEditForm.SetWordWrap(Sender: TObject);
begin
with Memo1 do
begin
WordWrap := not WordWrap;
if WordWrap then
ScrollBars := ssVertical else
ScrollBars := ssBoth;
WordWrap1.Checked := WordWrap;
end;
SetEditRect;
end;