Welcome

首页 / 软件开发 / Delphi / 第四章-文本编辑器的设计(一)(3)

第四章-文本编辑器的设计(一)(3)2007-05-08当用户在多个页面中进行切换时,程序应当保证对当前页面进行编辑。 例如在多页编辑器中,用户选中某一页面,即可对该页面中的文件进行编辑、寻找、设置、打印等。为了实现这一功能,定义了一个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;