知识大全 文本编辑器的设计(一)[1]
Posted 菜单
篇首语:得意犹堪夸世俗,诏黄新湿字如鸦。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 文本编辑器的设计(一)[1]相关的知识,希望对你有一定的参考价值。
DELPHI基础教程:文本编辑器的设计(一)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
本章介绍多文本界面(MDI) 多页面界面(MPI)技术 VCL库中TMemo TEdit 控件以及有关文本编辑的常用对话框的使用 我们开发的MPIEdit dpr是一个文本编辑的实用程序 可实现如下功能
● MDI的编辑环境
● MPI的编辑环境
● 创建打开 编辑 保存文件
● 查找 替换文件中指定的字符串
● 复制 粘贴 剪切字符串
● 设置文件字体大小
● 打印文件
本章将通过MPIEdit实用程序逐一介绍在Delphi中如何实现上述功能
文本编辑器是一种常用的应用程序 用户在编辑器中编辑多种文件 在多个文件之间进行数据交换 对文件进行各种属性设置 并按自己要求打印文件
多文本界面
多文本界面是一种在一个应用程序中同时打开两个或更多文件的界面形式 例如在字处理程序可同时打开多个文件 用户可在多个文件中方便地进行切换
MDI应用程序提供了一种方便的方式 使得用户在同一工作区域内对多个文档进行观察和交换数据 MDI工作区域可分为父窗体和子窗体 在Dephi的MDI应用程序中 父窗体通常是程序的主窗体
在MDI中 父窗体之外的窗体称为子窗体 文档或其它数据在子窗体打开 这些文档可以是相同的文件格式 或在应用程序支持下也可以是不同的文件格式
在设计阶段 可创建 MDI 父窗体作为应用程序主窗体 亦可创建子窗体样板 Delphi允许创建多个子窗体类型 但MDI应用程序只支持其中的一种
本节讲述创建MDI应用程序的基本步骤
● 创建主窗口
● 创建子窗口
● 创建主窗口菜单
● 融合菜单
● 运行时创建子窗口
创建父窗口
在MDI应用程序中 主窗口为应用文档提供一个工作区域 这个区域可打开一个或多个子窗口 创建父窗口是建立MDI应用程序的第一步
创建父窗口与其它窗口类似 不同之处在于设置窗体的FormStyle属性
FormStyle属性可决定一个窗体是父窗口还是子窗口 或不是MDI类型 只能在设计阶段确定FormStyle 在Object Inspector窗口中将FormStyle属性设置成fsMDIForm 值得注意的是应当把父窗口定义为应用程序的主窗体 否则程序编译会出错
创建子窗口
设计阶段可创建子窗口的样板 用户在运行进使用样板的实例 子窗口是缺省可见的 如果应用程序在运行进创建子窗口 不要让Delphi自动地创建
创建子窗口时将窗体的FormStyle属性设置为fsMDIChild 如果程序在运行时创建子窗口 则
选择OPtions|Project菜单 系统弹出自动创建列表对话框
在自动创建列表中选中子窗口
单击>按钮将子窗口移至可得到(Available)窗体列表
并单击OK按钮退出
创建应用程序菜单与菜单融合
父窗口的菜单应作为应用程序主菜单 如果子窗口有菜单 则当子窗口在运行获得焦点并最大化时 子窗口的菜单项将融合父窗口菜单
创建父窗口与子窗口菜单的方法与创建普通窗体菜单类似 详细步骤见第一章 菜单融合是指程序运行过程中 子菜单与父窗口菜单的相互作用 如当子窗口获得焦点时 子窗口的菜单或插入主窗口的菜单中 或将替换部分或全部的父窗口菜单
进行菜单融合需设置的两个属性
● 窗体的Menu属性
● 菜单项的GroupIndex属性
Menu属性定义窗体的活动菜单 而菜单融合只对活动菜单进行 如果窗体有多个菜单部件 运行时可通过以下代码进行改变
Form Menu := SecondMenu;
GroupIndex属性决定出现在菜单条中各菜单项的位置 在菜单融合中 GroupIndex 将
决定融合菜单是插入还是替换主窗体菜单条中的菜单
GroupIndex的缺省值是 可以用下规则确定其值
数值越小 菜单的位置越靠左
例如 GroupIndex为 的菜单将出现在菜单条中的最左端 随着GroupIndex数值的增大 菜单项依次向右排列
若需替换主菜单中的某一菜单项 则将子菜单相应菜单项的GroupIndex设为与之相等的值 这条规则适合一个或多个菜单项 例如 主菜单中的 Edit 菜单项的GroupIndex 的值为 将子菜单的一个或多个菜单项的GroupIndext的值设为 则在运行时 这些菜单项替换主窗口的 Edit 菜单
将同一窗体的多个菜单项的GroupIndex设为相同值 原有的排列顺序在菜单融合时将保持不变
若要在菜单融合时插入菜单项 需在主菜单中预留数值 位置 例如 主菜单的两菜单项数值为 则子菜单GroupIndex数值为 的菜单在融合时将插入其中
在使用MDI界面时 用户通常会打开多个窗体 为了使用户方便地进行窗体切换 常设有一个进行切换的菜单项 此菜单列出了打开窗体的名称 当用户选择其中的一个时 程序进行相应的窗体切换 在Delphi的MDI设计时 可非常方便地实现这一功能 方法是将父窗口的WindowMenu设置成该菜单项的名字即可
多页面界面
多页面界面是一种非常友好的界面形式 它由一个窗体和多个页面组成 关于每个页面的信息列在窗体底部的标签(Tabs)上 用户可通过选择标签来进行页面切换 每次只有一个页面显示在窗体中 MPI较MDI使用更为方便 且切换速度更快 本章例程就是多页面界面的例子 另外Delphi集成开发环境中的代码编辑(Code Editor)窗体是MPI应用在文本编辑中的实例 在MPI中 一个窗体内的多个文件可以方便地进行切换和交换数据
多页面界面分为静态MPI和动态MPI两种形式 静态MPI的标签数量固定 用户在事先设计好的多个页面上进行切换 象选择对话框(Option Dialog)就属于静MPI 动态MPI的标签数量不固定 由程序根据需要动态的产生或消除 象代码编辑窗体就是动态MPI 程序可根据用户的需要产生多个文本页面 也可以动态地关闭页面 利用Delphi的TNotebook和Ttabset 可十分方便地设计静态MPI 设计动态MPI则需要编写专门的代码
静态多页面界面
TNotebook TTabSet可用来开发静态多页面界面 TNotebook部件能显示多页 每页都有相应的控制 通常TNotebook与TTabset配合进行控制 TTabset 有一组水平的标签 每个标签可通过创建字符串列表进行某种控制
MPIEDit例程中的主窗体中有一个TNotebook 部件和 TTabSet 部件 把两个部件的Aglin属性设置成bsTop和bsBotton 使它们分别处在窗体的上下两部分 为了使TTabSet与TNotebook配合工作 使用下代码
TabSet Tabs := Notebook Page;
另外 在TabSet的OnClick事件中定义下如下代码 可使用户在选择标签时开打相应的页
procedure TEditForm TabSetClick(Sender : TObject) …
begin
Notebook PageIndex := TabSet TabIndex;
…
end;
设计静态MPI时 可在部件窗体(Component Palette)的WIN 页面中选中TNotebook 部件 然后在Object inspector窗体中双击TNotebook的Pages属性 Dephi 将弹出对话框 用户可以在此确定Notebook的页数和字符串列表 如图 关闭对话框后 可对每一页进行设计 使用鼠标右按钮弹出快速菜单进行页面切换
动态多页面界面
使用Delphi进行静态MPI设计非常简单 进行动态MPI设计则需编写专门的代码 对于一个多页面文本编辑器 应能实现以下功能
● 动态生成页面 每个页面均能进行文本编辑
● 动态关闭页面 直到窗体中只有一个页面为止
● 页面切换不影响各种文本编辑操作
cha138/Article/program/Delphi/201311/25254相关参考
DELPHI基础教程:文本编辑器的设计(二)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
DELPHI基础教程:文本编辑器的设计(二)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
DELPHI基础教程:文本编辑器的设计(二)[4] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
DELPHI基础教程:文本编辑器的设计(二)[3] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!&
Eclipse使用系统内置的TextEditor做为文本编辑器这个文本编辑器有一个长期存在的问题那就是文本无法换行虽然这个问题长期存在而且解决起来并不困难但是这却给人们带来不少麻烦 &n
今天在做项目的时候遇到上传文本框的问题 <inputtype=filesize=name=photoupload/> 在firefox中该控件产生的文本框是默认不可编辑的但是在IE
最近由于自己想做一个网站形式的代码库自已写一个在线文本编辑器对于现在的我来确实是很不切实际呵呵!再说了现在有一个非常好的在线文本
在使用Word2010进行文字编辑时,下列叙述错误的是_____。A、允许同时打开多个文档B、可将正在编辑的文档另存为一个纯文本文件C、使用“打开”命令可以打开一个已存在的文档D、打印预览文档时,打印
最近在用Delphi编写程序时发现当ListBox(列表框)中的文本超过显示范围时就看不到文本的完整内容这很不方便于是决定动手解决这个问题让鼠标指到哪里就显示哪里的全部文本内容 一分析问题 我
为什么在百度百科里编辑的词条一直通不过?基本每个不通过的词条都会有原因的,你看看不通过的原因。基本原因如下:1、编辑的内容没有权威的参考资料。2、编辑的内容存在虚假、过度宣传。百度百科词条不通过原因: