其他语言

位置:IT落伍者 >> 其他语言 >> 浏览文章

DELPHI基础教程:文本编辑器的设计(一)[2]


发布日期:2020年03月19日
 
DELPHI基础教程:文本编辑器的设计(一)[2]

为了实现以上功能程序中使用了动态页面类(TDynaPage)其定义如下

type TDynaPage = Class(TObject)

该类可根据需要动态的产生页面 每个页面上创建了可进行文本编辑的TMeno部件

procedure…

puclic

CurPage : integer;

FileList : TSringList;

end;

CurPage表示当前用户选择的页面数用户切换增加删除页面均影响CurPage 的值CurPage初如化为零页FileList存放打开或创建文件的名字以及与这些文件相关的编辑部件TMemo页面动态创建删除将影响FilstList的值

TNotebook部件创建后至少有一个页面因此Pages属性不是空值只要往Pages中加入字符串Delphi自动地把该字符串与TPage类对象相联系TPage类是TCustomEdit派生出来的在对象浏览器(Object Browse)中可观察到TPage的数据成员和方法静态生成的页面也是 TPage类

要创建多页面编辑器必须从TPage的父件(Parent属件)创建相应编辑部件但在动态创建页面时TPage只是一个与字符串相联系的TObject类不能写成

MemoParent := NotebookPagesObject[ ];

在Delphi中宣称对象和创建对象都是用指针来标识 因此可用无类型指针进行指针传递

var

Pi : Pointer;

begin

Pi := NotebookPagesObject[];

MemoParent := Pi;

end;

这样就可在TPage上动态创建编辑部件了

往Notebook中动态生成页面时页面应所相应的切换TDynaPage NotebookTabset有关的属性要作相应的调整

TDynaPage的DynaAdd方法定义如下

procedure TDynaPageDynaAdd(Sender:TNotebook;FileName:String)

var

Pi:Pointer;

Memo:TMemo;

begin

SenderPagesadd(FileName)

Pi:= SenderPagesObjects[SenderPagesCount];

DynaMemo(pi)

DynaPageFileListaddObject(FileNameMemo

EditFormTabSetTabs := SenderPages;

EditFormTabsetTabIndex:=SenderPagesCount;

EditFormNotebookPageIndex := EditFormTabsetTabIndex;

DynaPageCurPage:= SenderPagesCount;

end;

procedure DynaMemo(Pi:Pointer)

var

Memo:TMemo;

begin

Memo:=TMemoCreate(Pi)

MemoParent:=Pi;

MemoAlign:=alClient;

MemoborderStyle:=bsNone;

MemoHideSelection:=False;

Memo:=Memo;

end;

procedure TDynaPageDel(Sender:TNotebook;No:integer)

var

Pi:pointer;

begin

SenderPagesdelete(No)

EditFormTabSetTabsdelete(No)

FilelistDelete(No)

DynaPageCurPage:=EditFormTabSetTabIndex;

SenderPageIndex := EditFormTabsetTabIndex;

Pi:=FileListObjects[DynaPageCurPage];

Memo:=Pi;

EditFormCaption:=SenderPagesStrings[DynaPageCurPage];

end;

当用户在多个页面中进行切换时程序应当保证对当前页面进行编辑 例如在多页编辑器中用户选中某一页面即可对该页面中的文件进行编辑寻找设置打印等为了实现这一功能定义了一个TMemo类型的变量Memo该变量没有实例化每次调用DynaAddDynaDel方法均定把TabIndex指定页面的Memo指针传给Memo这样在程序运行中始终有一个实例化的Memo指针赋给Memo而菜单中的文本编辑功能均对Memo进行操作这种指针传递就能保证对当前页进行操作

定义了TDynaPage后只需在OpenClose菜单项中加入如下代码即可方便的在用户打开关闭文件时创建成删除页面

procedure TEditFormCloseClick(Sender: TObject)

begin

if DynaPageCurPage<> then

DynaPageDel(NotebookDynaPageCurPage)

if NotebookPagescount = then

CloseEnabled:=False;

end;

procedure TEditFormOpenClick(Sender: TObject)

begin

if OpenDialogExecute then

begin

if not(OpenFile or NewFile) then

begin

OpenFile:=true;

Open(OpenDialogFileName)

NotebookPagesStrings[]:=ExtractFileName( OpenDialogFileName)

TabSetTabs:=NotebookPages;

end

else

begin

DynaPageDynaAdd( Notebook ExtractFileName(OpenDialogFileName))

Open(OpenDialogFilename)

if NotebookPagescount > then

CloseEnabled:=True;

end;

end;

end;

文本编辑部件及应用

TEdit 部件

TEdit部件是一个标准的编辑框用户可在编辑框中输入数据编辑框也可向用户显示数据编辑时只能读写一行信息

TEdit的Text属性存放着用户输入的数据或向用户显示的数据Modified属性用以标识 Text的数据是否改变可通过设置Maxlength属性值来限制用户输入字符的个数量CharCase

属性可定义编辑框中字符的大小写如果设计者想禁止用户输入可将ReadOnly属性设置成真值编辑框也能用做密码输入框通过设置PassWordChar 属性的值可将用户输入的字符在编辑框中显示成指定的字符*号等编辑框还可以进行字符选择操作粘贴复制和剪切操作

[] [] []

               

上一篇:DELPHI基础教程:Delphi开发数据库应用程序概述(二)[3]

下一篇:DELPHI基础教程:文本编辑器的设计(一)[1]