📄 012.htm
字号:
<HTML><HEAD><meta http-equiv="Content-Type" content="text/html; charset=GB2312"><TITLE>—DELPHI基础教程—第四章 文本编辑器的设计(一)</TITLE><META NAME="keywords" CONTENT=" DELPHI基础教程 第四章 文本编辑器的设计(一)"><META NAME="description" CONTENT=" - DELPHI基础教程 - 第四章 文本编辑器的设计(一)"><style><!--#page {position:absolute; z-index:0; left:0px; top:0px}.tt3 {font: 9pt/12pt "宋体"}.tt2 {font: 12pt/15pt "宋体"}a {text-decoration:none}a:hover {color: blue;text-decoration:underline}--></style></HEAD><body text="#000000" bgcolor="#FFFFFF" leftmargin="3" topmargin="3" marginheight="3" marginwidth="3"><TABLE WIDTH="100%" CELLPADDING=10 CELLSPACING=0 BORDER=0><TR><TD CLASS="tt3" VALIGN="top" width="8%" ><strong><A HREF="013.htm"><FONT style="FONT-SIZE: 9pt">后一页</font></A><BR><A HREF="011.htm"><FONT style="FONT-SIZE: 9pt">前一页</font></A><BR><A HREF="index.html"><FONT style="FONT-SIZE: 9pt">回目录</font></A><BR></strong></TD><TD class="tt2" width="84%"><center><B><FONT style="FONT-SIZE: 16.5pt" COLOR="#FF6666" FACE="隶书">第四章 文本编辑器的设计(一)</FONT></B></center><hr width="94%"><p> 本章介绍多文本界面</font>(MDI)<font face="宋体" lang="ZH-CN">、多页面界面</font>(MPI)<fontface="宋体" lang="ZH-CN">技术;</font>VCL<font face="宋体" lang="ZH-CN">库中</font>TMemo<fontface="宋体" lang="ZH-CN">,</font>TEdit <font face="宋体" lang="ZH-CN">控件以及有关文本编辑的常用对话框的使用。我们开发的</font>MPIEdit.dpr<fontface="宋体" lang="ZH-CN">是一个文本编辑的实用程序,可实现如下功能:</p><p> ●</font> MDI<font face="宋体" lang="ZH-CN">的编辑环境</p><p> ●</font> MPI<font face="宋体" lang="ZH-CN">的编辑环境</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> <font face="宋体" lang="ZH-CN">设置文件字体大小</p><p> ●</font> <font face="宋体" lang="ZH-CN">打印文件 </p><p> 本章将通过</font>MPIEdit<font face="宋体" lang="ZH-CN">实用程序逐一介绍在</font>Delphi<fontface="宋体" lang="ZH-CN">中如何实现上述功能。</p><p> 文本编辑器是一种常用的应用程序。用户在编辑器中编辑多种文件,在多个文件之间进行数据交换,对文件进行各种属性设置,并按自己要求打印文件。 </p></font><p>4.1 <font face="宋体" lang="ZH-CN">多文本界面 </p><p> 多文本界面是一种在一个应用程序中同时打开两个或更多文件的界面形式。例如在字处理程序可同时打开多个文件,用户可在多个文件中方便地进行切换.</font></p><p>MDI<font face="宋体" lang="ZH-CN">应用程序提供了一种方便的方式,使得用户在同一工作区域内对多个文档进行观察和交换数据。</font>MDI<fontface="宋体" lang="ZH-CN">工作区域可分为父窗体和子窗体,在</font>Dephi<fontface="宋体" lang="ZH-CN">的</font>MDI<font face="宋体" lang="ZH-CN">应用程序中,父窗体通常是程序的主窗体。</p><p> 在</font>MDI<font face="宋体" lang="ZH-CN">中,父窗体之外的窗体称为子窗体,文档或其它数据在子窗体打开。这些文档可以是相同的文件格式,或在应用程序支持下也可以是不同的文件格式。</p><p> 在设计阶段,可创建</font> MDI <font face="宋体" lang="ZH-CN">父窗体作为应用程序主窗体,</font><font face="宋体" lang="ZH-CN">亦可创建子窗体样板。</font>Delphi<fontface="宋体" lang="ZH-CN">允许创建多个子窗体类型,但</font>MDI<fontface="宋体" lang="ZH-CN">应用程序只支持其中的一种。</p><p> 本节讲述创建</font>MDI<font face="宋体" lang="ZH-CN">应用程序的基本步骤:</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> <font face="宋体" lang="ZH-CN">融合菜单</p><p> ●</font> <font face="宋体" lang="ZH-CN">运行时创建子窗口 </p></font><p>4.1.1 <font face="宋体" lang="ZH-CN">创建父窗口 </p><p> 在</font>MDI<font face="宋体" lang="ZH-CN">应用程序中,主窗口为应用文档提供一个工作区域。这个区域可打开一个或多个子窗口,创建父窗口是建立</font>MDI<fontface="宋体" lang="ZH-CN">应用程序的第一步。</p><p> 创建父窗口与其它窗口类似,不同之处在于设置窗体的</font>FormStyle<fontface="宋体" lang="ZH-CN">属性。</p><p> </font>FormStyle<font face="宋体" lang="ZH-CN">属性可决定一个窗体是父窗口还是子窗口,或不是</font>MDI<fontface="宋体" lang="ZH-CN">类型。</font> <font face="宋体" lang="ZH-CN">只能在设计阶段确定</font>FormStyle<fontface="宋体" lang="ZH-CN">。在</font>Object Inspector<font face="宋体" lang="ZH-CN">窗口中将</font>FormStyle<fontface="宋体" lang="ZH-CN">属性设置成</font>fsMDIForm<font face="宋体" lang="ZH-CN">。值得注意的是应当把父窗口定义为应用程序的主窗体,否则程序编译会出错。 </p></font><p>4.1.2 <font face="宋体" lang="ZH-CN">创建子窗口 </p><p> 设计阶段可创建子窗口的样板,用户在运行进使用样板的实例。子窗口是缺省可见的,如果应用程序在运行进创建子窗口,不要让</font>Delphi<fontface="宋体" lang="ZH-CN">自动地创建。</p><p> 创建子窗口时将窗体的</font>FormStyle<font face="宋体" lang="ZH-CN">属性设置为</font>fsMDIChild<fontface="宋体" lang="ZH-CN">。如果程序在运行时创建子窗口,则</p><p> </font>1. <font face="宋体" lang="ZH-CN">选择</font>OPtions|Project<fontface="宋体" lang="ZH-CN">菜单,系统弹出自动创建列表对话框;</p><p> </font>2. <font face="宋体" lang="ZH-CN">在自动创建列表中选中子窗口;</p><p> </font>3. <font face="宋体" lang="ZH-CN">单击</font>><font face="宋体"lang="ZH-CN">按钮将子窗口移至可得到</font>(Available)<font face="宋体"lang="ZH-CN">窗体列表;</p><p> </font>4. <font face="宋体" lang="ZH-CN">并单击</font>OK<font face="宋体"lang="ZH-CN">按钮退出。</p></font><p>4.1.3 <font face="宋体" lang="ZH-CN">创建应用程序菜单与菜单融合 </p><p> 父窗口的菜单应作为应用程序主菜单。如果子窗口有菜单,</font><font face="宋体" lang="ZH-CN">则当子窗口在运行获得焦点并最大化时,子窗口的菜单项将融合父窗口菜单。</font></p><font face="宋体" lang="ZH-CN"><p> 创建父窗口与子窗口菜单的方法与创建普通窗体菜单类似,</font><font face="宋体" lang="ZH-CN">详细步骤见第一章。菜单融合是指程序运行过程中,子菜单与父窗口菜单的相互作用。</font><font face="宋体" lang="ZH-CN">如当子窗口获得焦点时,子窗口的菜单或插入主窗口的菜单中,或将替换部分或全部的父窗口菜单。</p><p> 进行菜单融合需设置的两个属性:</p><p> ●</font> <font face="宋体" lang="ZH-CN">窗体的</font>Menu<fontface="宋体" lang="ZH-CN">属性</p><p> ●</font> <font face="宋体" lang="ZH-CN">菜单项的</font>GroupIndex<fontface="宋体" lang="ZH-CN">属性</p></font><p><font face="宋体" lang="ZH-CN"> Menu属性定义窗体的活动菜单,而菜单融合只对活动菜单进行。如果窗体有多个菜单部件,运行时可通过以下代码进行改变: </p><p> Form1.Menu := SecondMenu; </p></font><p><font face="宋体" lang="ZH-CN"> GroupIndex属性决定出现在菜单条中各菜单项的位置,在菜单融合中,GroupIndex将</p><p>决定融合菜单是插入还是替换主窗体菜单条中的菜单。</p><p> GroupIndex的缺省值是0,可以用下规则确定其值:</p><p> 1. 数值越小,菜单的位置越靠左。</p><p> 例如:GroupIndex为0的菜单将出现在菜单条中的最左端。随着GroupIndex数值的增大,菜单项依次向右排列。</p><p> 2. 若需替换主菜单中的某一菜单项,则将子菜单相应菜单项的GroupIndex设为与之相等的值。这条规则适合一个或多个菜单项。例如,主菜单中的"Edit"菜单项的GroupIndex的值为1。将子菜单的一个或多个菜单项的GroupIndext的值设为1,则在运行时,这些菜单项替换主窗口的"Edit"菜单。</p><p> 将同一窗体的多个菜单项的GroupIndex设为相同值,原有的排列顺序在菜单融合时将保持</p><p>不变。</p><p> 3. 若要在菜单融合时插入菜单项,需在主菜单中预留数值“位置”。例如,主菜单的两菜单项数值为0,5,则子菜单GroupIndex数值为1,2,3,4的菜单在融合时将插入其中。</p><p> 在使用MDI界面时,用户通常会打开多个窗体。为了使用户方便地进行窗体切换,常设有一个进行切换的菜单项.此菜单列出了打开窗体的名称,当用户选择其中的一个时,程序进行相应的窗体切换。在</font>Delphi<fontface="宋体" lang="ZH-CN">的</font>MDI<font face="宋体" lang="ZH-CN">设计时,可非常方便地实现这一功能。方法是将父窗口的</font>WindowMenu<fontface="宋体" lang="ZH-CN">设置成该菜单项的名字即可。</font></p><p>4.2 <font face="宋体" lang="ZH-CN">多页面界面 </p><p> 多页面界面是一种非常友好的界面形式。它由一个窗体和多个页面组成,</font><font face="宋体" lang="ZH-CN">关于每个页面的信息列在窗体底部的标签</font>(Tabs)<fontface="宋体" lang="ZH-CN">上,用户可通过选择标签来进行页面切换。</font><font face="宋体" lang="ZH-CN">每次只有一个页面显示在窗体中。</font>MPI<fontface="宋体" lang="ZH-CN">较</font>MDI<font face="宋体" lang="ZH-CN">使用更为方便,且切换速度更快。本章例程就是多页面界面的例子。另外</font>Delphi<fontface="宋体" lang="ZH-CN">集成开发环境中的代码编辑</font>(Code Editor)<fontface="宋体" lang="ZH-CN">窗体是</font>MPI<font face="宋体" lang="ZH-CN">应用在文本编辑中的实例。在</font>MPI<fontface="宋体" lang="ZH-CN">中,一个窗体内的多个文件可以方便地进行切换和交换数据。</font></p><p> 多页面界面分为静态MPI<font face="宋体"lang="ZH-CN">和动态</font>MPI<font face="宋体" lang="ZH-CN">两种形式。静态</font>MPI<fontface="宋体" lang="ZH-CN">的标签数量固定,用户在事先设计好的多个页面上进行切换。象选择对话框</font>(OptionDialog)<font face="宋体" lang="ZH-CN">就属于静</font>MPI<font face="宋体"lang="ZH-CN">。动态</font>MPI<font face="宋体" lang="ZH-CN">的标签数量不固定,由程序根据需要动态的产生或消除,象代码编辑窗体就是动态</font>MPI<fontface="宋体" lang="ZH-CN">,程序可根据用户的需要产生多个文本页面,也可以动态地关闭页面。利用</font>Delphi<fontface="宋体" lang="ZH-CN">的</font>TNotebook<font face="宋体" lang="ZH-CN">和</font>Ttabset<font face="宋体" lang="ZH-CN">可十分方便地设计静态</font>MPI<fontface="宋体" lang="ZH-CN">。设计动态</font>MPI<font face="宋体" lang="ZH-CN">则需要编写专门的代码。</font></p><p>4.2.1 <font face="宋体" lang="ZH-CN">静态多页面界面 </p><p> </font>TNotebook,TTabSet<font face="宋体" lang="ZH-CN">可用来开发静态多页面界面。</font>TNotebook<fontface="宋体" lang="ZH-CN">部件能显示多页,</font> <font face="宋体"lang="ZH-CN">每页都有相应的控制。通常</font>TNotebook<font face="宋体"lang="ZH-CN">与</font>TTabset<font face="宋体" lang="ZH-CN">配合进行控制。</font>TTabset<font face="宋体" lang="ZH-CN">有一组水平的标签</font>,<font face="宋体"lang="ZH-CN">每个标签可通过创建字符串列表进行某种控制。</p><p> </font>MPIEDit<font face="宋体" lang="ZH-CN">例程中的主窗体中有一个</font>TNotebook<font face="宋体" lang="ZH-CN">部件和</font> TTabSet <font face="宋体" lang="ZH-CN">部件。</font><font face="宋体" lang="ZH-CN">把两个部件的</font>Aglin<font face="宋体"lang="ZH-CN">属性设置成</font>bsTop<font face="宋体" lang="ZH-CN">和</font>bsBotton<fontface="宋体" lang="ZH-CN">,使它们分别处在窗体的上下两部分。为了使</font>TTabSet<fontface="宋体" lang="ZH-CN">与</font>TNotebook<font face="宋体" lang="ZH-CN">配合工作,使用下代码: </p><p> </font>TabSet1.Tabs := Notebook1.Page; </p><p><font face="宋体" lang="ZH-CN"> 另外,在</font>TabSet<fontface="宋体" lang="ZH-CN">的</font>OnClick<font face="宋体" lang="ZH-CN">事件中定义下如下代码,可使用户在选择标签时开打相应的页。 </p><p> </font>procedure TEditForm.TabSetClick(Sender : TObject);<font face="宋体"lang="ZH-CN">…</font></p><font face="宋体" lang="ZH-CN"><p> </font>begin</p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -