TNotebook部件创建后至少有一个页面,因此Pages属性不是空值,只要往Pages中加入字符串,Delphi自动地把该字符串与TPage类对象相联系。TPage类是TCustomEdit派生出来的,在对象浏览器(Object Browse)中可观察到TPage的数据成员和方法。静态生成的页面也是 TPage类。
要创建多页面编辑器,必须从TPage的父件(Parent属件)创建相应编辑部件。但在动态创建页面时,TPage只是一个与字符串相联系的TObject类,不能写成:
MemoParent
:=
Notebook1.Pages.Object[ ];
在Delphi中,宣称对象和创建对象都是用指针来标识, 因此可用无类型指针进行指针传递。
var Pi : Pointer; begin
Pi := Notebook1.Pages.Object[]; Memo.Parent := Pi; end;
这样就可在TPage上动态创建编辑部件了。 往Notebook1中动态生成页面时,页面应所相应的切换,TDynaPage. Notebook1.Tabset1有关的属性要作相应的调整。
TDynaPage的DynaAdd方法定义如下:
procedure
TDynaPage.DynaAdd(Sender:TNotebook;FileName:String); var Pi:Pointer; Memo:TMemo; begin
Sender.Pages.add(FileName); Pi:=
Sender.Pages.Objects[Sender.Pages.Count-1];
DynaMemo(pi);
DynaPage.FileList.addObject(FileName,Memo1);
EditForm.TabSet1.Tabs := Sender.Pages; EditForm.Tabset1.TabIndex:=Sender.Pages.Count-1;
EditForm.Notebook1.PageIndex EditForm.Tabset1.TabIndex; DynaPage.CurPage:= Sender.Pages.Count-1; end;
procedure DynaMemo(Pi:Pointer); var
Memo:TMemo; begin
Memo:=TMemo.Create(Pi); Memo.Parent:=Pi;
:=
Memo.Align:=alClient; Memo.borderStyle:=bsNone; Memo.HideSelection:=False; Memo1:=Memo; end; procedure
TDynaPage.Del(Sender:TNotebook;No:integer); var Pi:pointer; begin
Sender.Pages.delete(No);
EditForm.TabSet1.Tabs.delete(No);