- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安网站维护基地 来源:黑客防线网安网站维护基地 浏览次数:0 |
MPIEDit例程中的主窗体中有一个TNotebook 部件和 TTabSet 部件。 把两个部件的Aglin属性设置成bsTop和bsBotton,使它们分别处在窗体的上下两部分。为了使TTabSet与TNotebook配合工作,使用下代码:
TabSet1.Tabs := Notebook1.Page;
另外,在TabSet的OnClick事件中定义下如下代码,可使用户在选择标签时开打相应的页。
procedure TEditForm.TabSetClick(Sender : TObject);…
begin
Notebook1.PageIndex := TabSet1.TabIndex;
…
end;
设计静态MPI时,可在部件窗体(Component Palette)的WIN3。1页面中选中TNotebook 部件,然后在Object inspector窗体中双击TNotebook的Pages属性,Dephi 将弹出对话框,用户可以在此确定Notebook的页数和字符串列表,如图4.6。关闭对话框后, 可对每一页进行设计,使用鼠标右按钮弹出快速菜单进行页面切换。
4.2.2 动态多页面界面
使用Delphi进行静态MPI设计非常简单,进行动态MPI设计则需编写专门的代码。 对
于一个多页面文本编辑器,应能实现以下功能:
● 动态生成页面,每个页面均能进行文本编辑
● 动态关闭页面,直到窗体中只有一个页面为止
● 页面切换不影响各种文本编辑操作
为了实现以上功能,程序中使用了动态页面类(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 := 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);
Filelist.Delete(No);
DynaPage.CurPage:=EditForm.TabSet1.TabIndex;
Sender.PageIndex := EditForm.Tabset1.TabIndex;
Pi:=FileList.Objects[DynaPage.CurPage];
Memo1:=Pi;
EditForm.Caption:=Sender.Pages.Strings[DynaPage.CurPage];
end;
当用户在多个页面中进行切换时,程序应当保证对当前页面进行编辑。 例如在多页编辑器中,用户选中某一页面,即可对该页面中的文件进行编辑、寻找、设置、打印等。为了实现这一功能,定义了一个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
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |