为了实现以上功能程序中使用了动态页面类(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 属性的值可将用户输入的字符在编辑框中显示成指定的字符如*号等编辑框还可以进行字符选择操作粘贴复制和剪切操作
[] [] []