第四章-文本编辑器的设计(一)(1)

本章介绍多文本界面(MDI)、多页面界面(MPI)技术;VCL库中TMemo,TEdit 控件以及有关文本编辑的常用对话框的使用。我们开发的MPIEdit.dpr是一个文本编辑的实用程序,可实现如下功能:

● MDI的编辑环境

● MPI的编辑环境

● 创建打开、编辑、保存文件

● 查找、替换文件中指定的字符串

● 复制、粘贴、剪切字符串

● 设置文件字体大小

● 打印文件 

本章将通过MPIEdit实用程序逐一介绍在Delphi中如何实现上述功能。

文本编辑器是一种常用的应用程序。用户在编辑器中编辑多种文件,在多个文件之间进行数据交换,对文件进行各种属性设置,并按自己要求打印文件。 

4.1 多文本界面 

多文本界面是一种在一个应用程序中同时打开两个或更多文件的界面形式。例如在字处理程序可同时打开多个文件,用户可在多个文件中方便地进行切换.

MDI应用程序提供了一种方便的方式,使得用户在同一工作区域内对多个文档进行观察和交换数据。MDI工作区域可分为父窗体和子窗体,在Dephi的MDI应用程序中,父窗体通常是程序的主窗体。

在MDI中,父窗体之外的窗体称为子窗体,文档或其它数据在子窗体打开。这些文档可以是相同的文件格式,或在应用程序支持下也可以是不同的文件格式。

在设计阶段,可创建 MDI 父窗体作为应用程序主窗体, 亦可创建子窗体样板。Delphi允许创建多个子窗体类型,但MDI应用程序只支持其中的一种。

本节讲述创建MDI应用程序的基本步骤:

● 创建主窗口

● 创建子窗口

● 创建主窗口菜单

● 融合菜单

● 运行时创建子窗口 

4.1.1 创建父窗口 

在MDI应用程序中,主窗口为应用文档提供一个工作区域。这个区域可打开一个或多个子窗口,创建父窗口是建立MDI应用程序的第一步。

创建父窗口与其它窗口类似,不同之处在于设置窗体的FormStyle属性。

FormStyle属性可决定一个窗体是父窗口还是子窗口,或不是MDI类型。 只能在设计阶段确定FormStyle。在Object Inspector窗口中将FormStyle属性设置成fsMDIForm。值得注意的是应当把父窗口定义为应用程序的主窗体,否则程序编译会出错。 

4.1.2 创建子窗口 

设计阶段可创建子窗口的样板,用户在运行进使用样板的实例。子窗口是缺省可见的,如果应用程序在运行进创建子窗口,不要让Delphi自动地创建。

创建子窗口时将窗体的FormStyle属性设置为fsMDIChild。如果程序在运行时创建子窗口,则

1. 选择OPtions|Project菜单,系统弹出自动创建列表对话框;

2. 在自动创建列表中选中子窗口;

3. 单击>按钮将子窗口移至可得到(Available)窗体列表;

4. 并单击OK按钮退出。

4.1.3 创建应用程序菜单与菜单融合 

父窗口的菜单应作为应用程序主菜单。如果子窗口有菜单, 则当子窗口在运行获得焦点并最大化时,子窗口的菜单项将融合父窗口菜单。

创建父窗口与子窗口菜单的方法与创建普通窗体菜单类似, 详细步骤见第一章。菜单融合是指程序运行过程中,子菜单与父窗口菜单的相互作用。 如当子窗口获得焦点时,子窗口的菜单或插入主窗口的菜单中,或将替换部分或全部的父窗口菜单。

进行菜单融合需设置的两个属性:

● 窗体的Menu属性

● 菜单项的GroupIndex属性

Menu属性定义窗体的活动菜单,而菜单融合只对活动菜单进行。如果窗体有多个菜单部件,运行时可通过以下代码进行改变:

Form1.Menu := SecondMenu; 

GroupIndex属性决定出现在菜单条中各菜单项的位置,在菜单融合中,GroupIndex 将

决定融合菜单是插入还是替换主窗体菜单条中的菜单。

GroupIndex的缺省值是0,可以用下规则确定其值:

  1. 数值越小,菜单的位置越靠左。

例如:GroupIndex为0的菜单将出现在菜单条中的最左端。随着GroupIndex数值的增大,菜单项依次向右排列。

2. 若需替换主菜单中的某一菜单项,则将子菜单相应菜单项的GroupIndex设为与之相等的值。这条规则适合一个或多个菜单项。例如,主菜单中的"Edit"菜单项的GroupIndex 的值为1。将子菜单的一个或多个菜单项的GroupIndext的值设为1,则在运行时,这些菜单项替换主窗口的"Edit"菜单。

将同一窗体的多个菜单项的GroupIndex设为相同值,原有的排列顺序在菜单融合时将保持

不变。

3. 若要在菜单融合时插入菜单项,需在主菜单中预留数值“位置”。例如,主菜单的两菜单项数值为0,5,则子菜单GroupIndex数值为1,2,3,4的菜单在融合时将插入其中。

在使用MDI界面时,用户通常会打开多个窗体。为了使用户方便地进行窗体切换,常设有一个进行切换的菜单项.此菜单列出了打开窗体的名称,当用户选择其中的一个时,程序进行相应的窗体切换。在Delphi的MDI设计时,可非常方便地实现这一功能。方法是将父窗口的WindowMenu设置成该菜单项的名字即可。

时间: 2024-09-17 03:33:29

第四章-文本编辑器的设计(一)(1)的相关文章

第四章-文本编辑器的设计(一)(2)

4.2 多页面界面 多页面界面是一种非常友好的界面形式.它由一个窗体和多个页面组成, 关于每个页面的信息列在窗体底部的标签(Tabs)上,用户可通过选择标签来进行页面切换. 每次只有一个页面显示在窗体中.MPI较MDI使用更为方便,且切换速度更快.本章例程就是多页面界面的例子.另外Delphi集成开发环境中的代码编辑(Code Editor)窗体是MPI应用在文本编辑中的实例.在MPI中,一个窗体内的多个文件可以方便地进行切换和交换数据. 多页面界面分为静态MPI和动态MPI两种形式.静态MPI

第四章-文本编辑器的设计(二)(2)

例程中TEditForm.Replace方法响应OnReplace事件,Replace方法首先判断控制中被 选中字符串是否与替换字符串相等,如果不等则进行替换.而后根据Options中的方式循 环进行查找替换.直至无匹配字符串为止.其代码如下: procedure TEditForm.Replace(Sender: TObject); var Found: Boolean; begin with ReplaceDialog1 do begin if AnsiCompareText(Memo1.S

第四章-文本编辑器的设计(一)(3)

当用户在多个页面中进行切换时,程序应当保证对当前页面进行编辑. 例如在多页编辑器中,用户选中某一页面,即可对该页面中的文件进行编辑.寻找.设置.打印等.为了实现这一功能,定义了一个TMemo类型的变量:Memo1,该变量没有实例化,每次调用DynaAdd,DynaDel方法均定把TabIndex指定页面的Memo指针传给Memo1.这样在程序运行中,始终有一个实例化的Memo指针赋给Memo1,而菜单中的文本编辑功能均对Memo1进行操作.这种指针传递就能保证对当前页进行操作. 定义了TDyna

第四章-文本编辑器的设计(二)(1)

4.4.2查找对话框部件 查找对话框部件为应用程序提供查找对话框, 用户可使用查找对话框在文本文件中查找字符串. 可用Execult方法显示查找对话框,如图4.8.应用程序要查找的字符放到FindText属性中.Options 属性可决定查找对话框中有哪些选项.例如, 用户可选择是否显示匹配检查框.Options的常用选项如表4.2所示. 如果用户在对话框中输入字符并选择FindNext按钮,对话框将发生OnFind事件. 表4.2 查找对话框的Options属性的取值及含义 ━━━━━━━━━

第四章-文本编辑器的设计(一)(4)

TMemo部件提供了一组关于选择文本的属性和方法.如果想在部件成为当前控件时自动选择文本,可设置 AutoSelect 属性.运行时可用SelectAll 方法选中部件的全部文本. Selstart属性返回选中文本的开始位置,SelText 包含着被选中的文本.SelLength属性返回选中文本的长度,这两个属性可用于字符串的查找和替换.下一节将详细讨论. TMemo的Modified属性是一个运行时才能得到的属性,可判断部件被创建时或Modified属性最后一次设置成假值之后,部件上的文本是否

《Oracle性能优化求生指南》-第四章:数据库逻辑设计和物理设计-学习小结-1

1.建立逻辑数据模型为第一阶段,包括对应用程序需要处理和存储的信息进行建模,并确保所有必要的数据都能够正确.完整且无歧义地表示.在关系数据库的实现中,这通常是指构造一个标准化的实体-关系(E-R)模型. 2.将逻辑数据模型映射为物理数据模型为第二阶段.对关系数据库来讲,物理数据模型描述的是表.索引.视图.键和其他一些数据库特性. 3.第三范式: 实体(表)的所有数据完全依赖于主键. 不能有重复的属性(列)或属性组. 不存在仅依赖部分主键的实体数据. 不存在依赖于其他非主键的实体数据. 用一条格言

如何用C#编写文本编辑器

  如何用C#编写文本编辑器[2005-8-24版]        南京千里独行2005版权所有,不限转载,请保留版权声明 摘要    本文探讨了使用C#从底层开发一个带格式的文本编辑器的任务,深入探讨了其中的文档对象模型的设计,图形化用户界面的处理和用户操作的响应,说明了其中的某些技术问题和解决之道. 前言     小弟从大学里开始接触编程也有6年了,工作4年也是干编程的活,见过不少程序,自己也编过不少,在学校编程自己觉得是搞艺术品,其实玩一些游戏,比如文明法老王星际等从某些角度看也是搞艺术品

求做一个文本编辑器类似于文本文档(比它要简单)

问题描述 求大神给做一个文本编辑器,功能:保存功能,编辑功能(复制,剪切,粘贴),字体,字号,颜色设置.就这些功能.求大神给做一个,救命啊,给高分... 解决方案 解决方案二:用windows里面的文本编辑器就行了.解决方案三:引用1楼jdgdf566的回复: 用windows里面的文本编辑器就行了. 这是我们的课程设计,要做一个文本编辑器,帮忙啊解决方案四:弄个jtextarea,弄个菜单,就行了.

手机端--富文本编辑器

问题描述 各位大神,手机端想弄一个富文本编辑器,有没有好的推荐:不是安卓...是基于浏览器的[有过成功经验的大虾,给点提示,,,谢谢] 解决方案 解决方案二:先从业务角度把东西想明白.在手机上弄一个Html编辑器,进行十几.二十几项编辑,如何操作?用手指头吗?先把这个业务设计出来,才好找实现.解决方案三:需求挺逗解决方案四: 解决方案五:楼上更逗,人家需求怎么就逗了?手机端富文本编辑器很多场景都有需求解决方案六:百度的富文本编辑器ueditor,之前用了还不错.解决方案七:没看清是手机端使用.手