📄 012.htm
字号:
<p>Notebook1.PageIndex := TabSet1.TabIndex;</p><p><font face="宋体" lang="ZH-CN">…</font></p><p>end; </p><p><font face="宋体" lang="ZH-CN"> 设计静态</font>MPI<font face="宋体"lang="ZH-CN">时,可在部件窗体</font>(Component Palette)<font face="宋体"lang="ZH-CN">的</font>WIN3<font face="宋体" lang="ZH-CN">。</font>1<font face="宋体"lang="ZH-CN">页面中选中</font>TNotebook <font face="宋体" lang="ZH-CN">部件,然后在</font>Objectinspector<font face="宋体" lang="ZH-CN">窗体中双击</font>TNotebook<fontface="宋体" lang="ZH-CN">的</font>Pages<font face="宋体" lang="ZH-CN">属性,</font>Dephi<font face="宋体" lang="ZH-CN">将弹出对话框,用户可以在此确定</font>Notebook<fontface="宋体" lang="ZH-CN">的页数和字符串列表,如图</font>4.6<fontface="宋体" lang="ZH-CN">。关闭对话框后,</font> <font face="宋体"lang="ZH-CN">可对每一页进行设计,使用鼠标右按钮弹出快速菜单进行页面切换。</font></p><p>4.2.2 <font face="宋体" lang="ZH-CN">动态多页面界面 </p><p> 使用</font>Delphi<font face="宋体" lang="ZH-CN">进行静态</font>MPI<fontface="宋体" lang="ZH-CN">设计非常简单,进行动态</font>MPI<font face="宋体"lang="ZH-CN">设计则需编写专门的代码。</font> <font face="宋体" lang="ZH-CN">对</p><p>于一个多页面文本编辑器,应能实现以下功能:</p><p> ●</font> <font face="宋体" lang="ZH-CN">动态生成页面,每个页面均能进行文本编辑</p><p> ●</font> <font face="宋体" lang="ZH-CN">动态关闭页面,直到窗体中只有一个页面为止</p><p> ●</font> <font face="宋体" lang="ZH-CN">页面切换不影响各种文本编辑操作 </p><p> 为了实现以上功能,程序中使用了动态页面类</font>(TDynaPage)<fontface="宋体" lang="ZH-CN">,其定义如下: </p><p> </font>type TDynaPage = Class(TObject); </p><p><font face="宋体" lang="ZH-CN">该类可根据需要动态的产生页面,</font> <fontface="宋体" lang="ZH-CN">每个页面上创建了可进行文本编辑的</font>TMeno<fontface="宋体" lang="ZH-CN">部件。 </p><p> </font>procedure... </p><font face="宋体" lang="ZH-CN"><p> </font> puclic</p><p>CurPage : integer;</p><p>FileList : TSringList;</p><p>end; </p><p> CurPage<font face="宋体" lang="ZH-CN">表示当前用户选择的页面数,用户切换、增加、删除页面均影响</font>CurPage<font face="宋体" lang="ZH-CN">的值,</font>CurPage<font face="宋体" lang="ZH-CN">初如化为零页。</font>FileList<fontface="宋体" lang="ZH-CN">存放打开或创建文件的名字以及与这些文件相关的编辑部件</font>TMemo<fontface="宋体" lang="ZH-CN">,页面动态创建、删除将影响</font>FilstList<fontface="宋体" lang="ZH-CN">的值。</p><p> </font>TNotebook<font face="宋体" lang="ZH-CN">部件创建后至少有一个页面,因此</font>Pages<fontface="宋体" lang="ZH-CN">属性不是空值,只要往</font>Pages<font face="宋体"lang="ZH-CN">中加入字符串,</font>Delphi<font face="宋体" lang="ZH-CN">自动地把该字符串与</font>TPage<fontface="宋体" lang="ZH-CN">类对象相联系。</font>TPage<font face="宋体"lang="ZH-CN">类是</font>TCustomEdit<font face="宋体" lang="ZH-CN">派生出来的,在对象浏览器</font>(ObjectBrowse)<font face="宋体" lang="ZH-CN">中可观察到</font>TPage<font face="宋体"lang="ZH-CN">的数据成员和方法。静态生成的页面也是</font> TPage<fontface="宋体" lang="ZH-CN">类。</p><p> 要创建多页面编辑器,必须从</font>TPage<font face="宋体"lang="ZH-CN">的父件</font>(Parent<font face="宋体" lang="ZH-CN">属件</font>)<fontface="宋体" lang="ZH-CN">创建相应编辑部件。但在动态创建页面时,</font>TPage<fontface="宋体" lang="ZH-CN">只是一个与字符串相联系的</font>TObject<fontface="宋体" lang="ZH-CN">类,不能写成: </p><p> </font>MemoParent := Notebook1.Pages.Object[ ]; </p><p><font face="宋体" lang="ZH-CN">在</font>Delphi<font face="宋体" lang="ZH-CN">中,宣称对象和创建对象都是用指针来标识,</font><font face="宋体" lang="ZH-CN">因此可用无类型指针进行指针传递。 </p><p> </font>var</p><p>Pi : Pointer;</p><p>begin</p><p>Pi := Notebook1.Pages.Object[];</p><p>Memo.Parent := Pi;</p><p>end; </p><p><font face="宋体" lang="ZH-CN">这样就可在</font>TPage<font face="宋体"lang="ZH-CN">上动态创建编辑部件了。</p><p> 往</font>Notebook1<font face="宋体" lang="ZH-CN">中动态生成页面时,页面应所相应的切换,</font>TDynaPage.Notebook1.Tabset1<font face="宋体" lang="ZH-CN">有关的属性要作相应的调整。</font></p><p> TDynaPage<fontface="宋体" lang="ZH-CN">的</font>DynaAdd<font face="宋体" lang="ZH-CN">方法定义如下: </p></font><p>procedure TDynaPage.DynaAdd(Sender:TNotebook;FileName:String);</p><p>var</p><p>Pi:Pointer;</p><p>Memo:TMemo;</p><p>begin</p><p>Sender.Pages.add(FileName);</p><p>Pi:= Sender.Pages.Objects[Sender.Pages.Count-1];</p><p>DynaMemo(pi);</p><p>DynaPage.FileList.addObject(FileName,Memo1);</p><p>EditForm.TabSet1.Tabs := Sender.Pages;</p><p>EditForm.Tabset1.TabIndex:=Sender.Pages.Count-1;</p><p>EditForm.Notebook1.PageIndex := EditForm.Tabset1.TabIndex;</p><p>DynaPage.CurPage:= Sender.Pages.Count-1;</p><p>end; </p><p>procedure DynaMemo(Pi:Pointer);</p><p>var</p><p>Memo:TMemo;</p><p>begin</p><p>Memo:=TMemo.Create(Pi);</p><p>Memo.Parent:=Pi;</p><p>Memo.Align:=alClient;</p><p>Memo.borderStyle:=bsNone;</p><p>Memo.HideSelection:=False;</p><p>Memo1:=Memo;</p><p>end;</p><p>procedure TDynaPage.Del(Sender:TNotebook;No:integer); </p><p>var</p><p>Pi:pointer;</p><p>begin</p><p>Sender.Pages.delete(No);</p><p>EditForm.TabSet1.Tabs.delete(No);</p><p>Filelist.Delete(No);</p><p>DynaPage.CurPage:=EditForm.TabSet1.TabIndex;</p><p>Sender.PageIndex := EditForm.Tabset1.TabIndex;</p><p>Pi:=FileList.Objects[DynaPage.CurPage];</p><p>Memo1:=Pi;</p><p>EditForm.Caption:=Sender.Pages.Strings[DynaPage.CurPage];</p><p>end;</p><font face="宋体" lang="ZH-CN"><p> 当用户在多个页面中进行切换时,程序应当保证对当前页面进行编辑。</font><font face="宋体" lang="ZH-CN">例如在多页编辑器中,用户选中某一页面,即可对该页面中的文件进行编辑、寻找、设置、打印等。为了实现这一功能,定义了一个</font>TMemo<fontface="宋体" lang="ZH-CN">类型的变量:</font>Memo1,<font face="宋体" lang="ZH-CN">该变量没有实例化,每次调用</font>DynaAdd,DynaDel<fontface="宋体" lang="ZH-CN">方法均定把</font>TabIndex<font face="宋体" lang="ZH-CN">指定页面的</font>Memo<fontface="宋体" lang="ZH-CN">指针传给</font>Memo1<font face="宋体" lang="ZH-CN">。这样在程序运行中,始终有一个实例化的</font>Memo<fontface="宋体" lang="ZH-CN">指针赋给</font>Memo1<font face="宋体" lang="ZH-CN">,而菜单中的文本编辑功能均对</font>Memo1<fontface="宋体" lang="ZH-CN">进行操作。这种指针传递就能保证对当前页进行操作。</p><p> 定义了</font>TDynaPage<font face="宋体" lang="ZH-CN">后,只需在</font>Open,Close<fontface="宋体" lang="ZH-CN">菜单项中加入如下代码,即可方便的在用户打开关闭文件时创建成删除页面。 </p><p> </font>procedure TEditForm.Close1Click(Sender: TObject);</p><p>begin </p><p>if DynaPage.CurPage<>0 then</p><p>DynaPage.Del(Notebook1,DynaPage.CurPage);</p><p>if Notebook1.Pages.count = 1 then</p><p>Close1.Enabled:=False;</p><p>end; </p><p>procedure TEditForm.Open1Click(Sender: TObject);</p><p>begin</p><p>if OpenDialog1.Execute then</p><p>begin</p><p>if not(OpenFile or NewFile) then</p><p>begin</p><p>OpenFile:=true;</p><p>Open(OpenDialog1.FileName);</p><p>Notebook1.Pages.Strings[0]:=ExtractFileName( OpenDialog1.FileName);</p><p>TabSet1.Tabs:=Notebook1.Pages;</p><p>end</p><p>else</p><p>begin</p><p>DynaPage.DynaAdd( Notebook1, ExtractFileName(OpenDialog1.FileName));</p><p>Open(OpenDialog1.Filename);</p><p>if Notebook1.Pages.count > 1 then</p><p>Close1.Enabled:=True;</p><p>end;</p><p>end;</p><p>end; </p><p>4.3 <font face="宋体" lang="ZH-CN">文本编辑部件及应用 </p></font><p>4.3.1 TEdit <font face="宋体" lang="ZH-CN">部件 </p></font><p> TEdit<font face="宋体" lang="ZH-CN">部件是一个标准的编辑框,用户可在编辑框中输入数据。编辑框也可向用户显示数据。编辑时只能读写一行信息。</p><p> </font> TEdit<font face="宋体" lang="ZH-CN">的</font>Text<font face="宋体"lang="ZH-CN">属性存放着用户输入的数据或向用户显示的数据,</font>Modified<fontface="宋体" lang="ZH-CN">属性用以标识</font> Text<font face="宋体" lang="ZH-CN">的数据是否改变,可通过设置</font>Maxlength<fontface="宋体" lang="ZH-CN">属性值来限制用户输入字符的个数量,</font>CharCase</p><p><font face="宋体" lang="ZH-CN"> 属性可定义编辑框中字符的大小写。如果设计者想禁止用户输入,可将</font>ReadOnly<fontface="宋体" lang="ZH-CN">属性设置成真值。编辑框也能用做密码输入框。通过设置</font>PassWordChar
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -