第十章菜单与工具栏_第1页
第十章菜单与工具栏_第2页
第十章菜单与工具栏_第3页
第十章菜单与工具栏_第4页
第十章菜单与工具栏_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

指针常用于描述动态存储结构的实现 动态存储结构中常用的有链表 堆栈 队列等存储结构 可以把堆栈和队列看成特殊的链表 本节只是简单介绍一下如何利用指针和记录来实现链表结构 链表是一组元素的序列 在这个序列中每个元素总是与他前 面的元素相链接 第一个元素除外 这种关系可以通过指针来 实现 链表中的元素称为节点 第一个节点称为表头 最后一个 称为表尾 指向表头的指针称为头指针 在这个头指针里存放着 表头的地址 节点一般用记录来描述 描述节点的记录至少含有 两个域 一个用来存放数据 该域的类型根据要存放的数据而定 称为值域 另一个用来存放下一个节点的地址 称为指针域 表 尾不指向任何节点 其指针的值为 NIL 如图 应用 Object LPascal 的指针和记录类型 图示的链表可以声明如 下 TypeType Node RecordRecord Data Char Next Node EndEnd VarVar Head Node 或者 TypeType Link Node Node RecordRecord Data Char Next Node EndEnd VarVar Head Link 链表中相邻节点的地址是不连续的 当表头指针失去了指向 表头的地址后 就无法找到整个链表 从而不能再对链表进行操 作 同样 当任一节点中的指针失去了下一个节点后 链表就会 断开 后边的节点就会全部消失 若让表尾节点原有的空指针指向表头节点 就成为循环链表 如果链表的各节点既有指向前一个节点的指针又有指向后一个节 点指针 这时的链表就称为双向链表 链表可以描述许多实际问题 区别只是链表的值域有所不同 对链表的操作有查找 插入 删除等 对于插入和删除操作来 说 链表是很实用的数据结构 不论在链表的什么位置插入或删 除节点 只需修改相应的指针 不必像顺序存储的数组那样需要 移动数组中的每个元素 但对于链表来说 只有指针对用户来说 是可见的 因此 要访问链表中某个节点的数据 必须从头指针 开始依次搜索要访问的元素 队列和堆栈是特殊的链表 所谓队列就是一个先入先出表 在 该表中只允许在表头插入节点 在表尾删除节点 向队列中插入 节点称作入队 新节点入队后就成为队列的新表尾 从队列的表 头删除节点称为出队 出队后 其后继节点成为表头 由于队列 的插入和删除操作分别在两端进行 所以要删除的节点将是队列 中最先进入的节点 堆栈则允许在链表的表头进行插入和删除操 作 这里表头称为栈顶 另一端为栈底 向一个堆栈中插入新节 点成为入栈或压栈 新节点插入后成为新的栈顶节点 从堆栈中 删除节点称为出栈或退栈 它是把栈顶节点删除掉 是其相邻的 节点成为新的栈顶 由于插入和删除仅在栈顶一端进行 后进栈 的节点必然会先被删除 所以堆栈又称为先进后出表 例例 9 19 1 下列是一个关于在链表中利用指针处理字符串的程序 分析 该程序的功能是通过一个文本编辑框输入一个字符串 输入后将该字符串存入一个链表中 每输入一次 在链表中新添 一个节点 输入一些字符串后 单击 显示 按钮将输入的所有字 符串显示在一个列表框中 通过文本编辑框输入的所有字符串显 示在一个列表框中 通过文本框输入要查找的字符串 然后单击 删除 将该字符串从链表中删除 此时再按下 显示 按钮 显示 新的链表中的数据 设计时添加一个组件 Edit 名为 Edit1 添加一个组件 Memo 名为 Memo1 三个 Button 组件 删除 名为 btnDel 显示 名为 btnList 退出 名为 btnQuit 为了实现程序的功能 先声明一个全程的链表结构类型并命名 一个该类型变量 这些在窗体单元的实现部分的开始处进行实现 implementationimplementation R dfm typetype pLink Node Node record Data string 30 Next pLink endend varvar Head pLink 当程序创建窗体时进行变量 Head 的初始化 procedureprocedure TForm1 FormCreate Sender TObject beginbegin Head NilNil endend 当在文本编辑框中输入字符串并按下回车键后 在链表上添加 一个新节点 并将输入的数据保存在该节点的数据域中 这个功 能通过 Edit1 的 OnKeyPress 处理过程实现 procedureprocedure TForm1 Edit1KeyPress Sender TObject var Key Char varvar tempP P pLink beginbegin if Key 13 thenthen 如果按下回车键 beginbegin New tempP 创建一个节点 tempP Data Edit1 Text tempP Next NilNil if if Head NilNil thenthen 如果链表为空表 beginbegin New Head 创建链表 Head tempP endend elseelse beginbegin 如果链表不为空表 P Head whilewhile P Next NilNil dodo 找表尾 P P Next P Next tempP 将新节点添加到表尾 endend Edit1 Clear 清空编辑框 Edit1 SetFocus 置编辑框为活动焦点 endend endend 当按下 显示 时 在列表框 ListBox1 中显示链表中所有节点数据 域中的数据 procedureprocedure TForm1 btnListClick Sender TObject varvar P pLink beginbegin Memo1 Clear P Head WhileWhile P NilNil dodo beginbegin Memo1 Lines Add P Data P P Next end end end end 在 Edit1 输入框中输入一个字符串后 单击 删除 程序将按该 字符串在链表中查找相应的节点 找到后删除该节点 procedureprocedure TForm1 btnDelClick Sender TObject varvar P P1 pLink i integer beginbegin i 0 P Head if if P nilnil thenthen ShowMessage 链表为空 elseelse if if P Data Edit1 Text then beginbegin 如果链表的第一个节点为要删除的节点 Head P Next P Next nil P Head endend elseelse beginbegin 如果链表的第一个节点不是要删除的节点 P1 P Next if if P1 nilnil thenthen repeatrepeat if if P1 Data Edit1 Text thenthen beginbegin P Next P1 Next 如果找到一个要删除的节点 P1 P i i 1 endend elseelse beginbegin P P1 P1 P1 Next endend UntilUntil P1 nilnil if if i 0 thenthen ShowMessage 无匹配的字符串 endend endend procedureprocedure TForm1 btnQuitClick Sender TObject beginbegin Close endend 单击 Run 按钮 编译运行程序后 在文本框中输入了一些字 符串数据 然后单击 显示 按钮后 列表框中将显示输入的所有 字符串 如图 此时 在文本编辑框中输入一个要删除的数据 然后按下 删除 匹配的数据将从链表中删除 此时按下 显示 将在列表 10 1 1 主菜单主菜单 本节主要讲授 1 1 菜单编辑器菜单编辑器 例例 10 110 1 实现用菜单控制字幕 2 2 菜单项改进方法菜单项改进方法 例例 10 210 2 在 例例 10 110 1 中添加复选标志 3 3 设置单选菜单项设置单选菜单项 例例 10 310 3 在 例例 10 210 2 中添加单选菜单项 4 4 使用菜单摸板使用菜单摸板 主菜单一般称为菜单栏 其中包括一个或多个选择项称为菜单 项 当单击一个菜单项时 包含子菜单项的列表即被打开 1 1 菜单编辑器菜单编辑器 打开一个新窗体 单击组件栏中 Standard 页的 MainMenu 组 件 并将其放在容器 Form1 中 即可产生主菜单项 双击 MainMenu 组件或右键单击 在弹出的快捷菜单中选取 MenuDesigner 项 或单击 MainMenu 组件 并在对象监视器中 选 item 属性 鼠标点击 按钮 即可出现如图的菜单编辑器 并 自动产生一个空菜单项 MainMenu 菜单项的属性如表所示 在对象编辑器中 输入其 Caption 属性 例如 file edit 等 若输入 文本内容 菜单项的事件代码 beginbegin Label1 Caption InputBox 输入 请输入标题板的新内容 黄河入海流 endend procedureprocedure TForm1 N6Click Sender TObject 宋体 菜单项的事件代码 beginbegin Label1 Font Name 宋体 endend procedureprocedure TForm1 N7Click Sender TObject 隶书 菜单项的事件代码 beginbegin Label1 Font Name 隶书 endend procedureprocedure TForm1 N8Click Sender TObject 楷书 菜单项的事件代码 beginbegin Label1 Font Name 楷书 GB2312 endend procedureprocedure TForm1 N9Click Sender TObject 黑体 菜单项的事件代码 beginbegin Label1 Font Name 黑体 endend procedureprocedure TForm1 N10Click Sender TObject 粗体 菜单项的事件代码 beginbegin if if Label1 Font Style fsBold thenthen 集合的交运算 Label1 Font Style Label1 Font Style fsBold elseelse Label1 Font Style Label1 Font Style fsBold endend procedureprocedure TForm1 N11Click Sender TObject 斜体 菜单项的事件代码 beginbegin if if Label1 Font Style fsItalic thenthen 集合的交运算 Label1 Font Style Label1 Font Style fsItalic elseelse Label1 Font Style Label1 Font Style fsItalic endend procedureprocedure TForm1 N12Click Sender TObject 下划线 菜单项的事件代码 beginbegin if if Label1 Font Style fsUnderline thenthen 集合的交运算 Label1 Font Style Label1 Font Style fsUnderline elseelse Label1 Font Style Label1 Font Style fsUnderline endend 编写按钮控件 Button1 的 OnClick 事件代码 procedureprocedure TForm1 Button1Click Sender TObject beginbegin if if Button1 Caption 暂停 thenthen beginbegin Button1 caption 继续 Timer1 Enabled False endend elseelse beginbegin Button1 Caption 暂停 Timer1 Enabled True end end end end 编写时间控件 Timer1 的 OnClick 事件代码 procedureprocedure TForm1 Timer1Timer Sender TObject beginbegin if if Label1 Left Label1 Width 0 thenthen Label1 Left Label1 Left 20 elseelse Label1 Left Form1 ClientWidth endend 程序下载 2 2 菜单项改进方法菜单项改进方法 1 设置热键 如图所示 单击菜单项 文本内容 的 ShortCut 属性 会弹出一个下拉菜单 其中包含许多热键组合 例如按 Alt T 则在用户使用键 盘键入该热键组合同选择该菜单项功能相同 但他不同于在菜单 项 Caption 属性中设置 粗体 菜单项的事件代码 beginbegin if if Label1 Font Style fsBold thenthen 集合的交运算 beginbegin Label1 Font Style Label1 Font Style fsBold N10 Checked True endend elseelse beginbegin Label1 Font Style Label1 Font Style fsBold N10 Checked False endend endend procedureprocedure TForm1 N11Click Sender TObject 斜体 菜单项的事件代码 beginbegin if if Label1 Font Style fsItalic thenthen 集合的交运算 beginbegin Label1 Font Style Label1 Font Style fsItalic N11 Checked True endend elseelse beginbegin Label1 Font Style Label1 Font Style fsItalic N11 Checked False end end end end procedureprocedure TForm1 N12Click Sender TObject 下划线 菜单项的事件代码 beginbegin if if Label1 Font Style fsUnderline thenthen 集合的交运算 beginbegin Label1 Font Style Label1 Font Style fsUnderline N12 Checked True endend elseelse beginbegin Label1 Font Style Label1 Font Style fsUnderline N12 Checked False endend end end 程序下载 3 3 设置单选菜单项设置单选菜单项 在例 10 2 的基础上 将菜单项 文本字体 下的子菜单项宋体 隶 书 楷体 黑体中的 RadioItem 属性改为 true 即表示在同一组 中的菜单项是单选的 并在选中的菜单项前显示圆点 而在同一 组中菜单项的 GroupIndex 属性应设置为相同值 以表示在同一 组中 例例 10 310 3 在 例例 10 210 2 中添加单选菜单项 procedureprocedure TForm1 N6Click Sender TObject beginbegin Label1 Font Name 宋体 N6 Checked True endend procedureprocedure TForm1 N7Click Sender TObject beginbegin Label1 Font Name 隶书 N7 Checked True endend procedureprocedure TForm1 N8Click Sender TObject beginbegin Label1 Font Name 楷书 GB2312 N8 Checked True endend procedureprocedure TForm1 N9Click Sender TObject beginbegin Label1 Font Name 黑体 N9 Checked True endend 程序下载 4 4 使用菜单摸板使用菜单摸板 在 Delphi 中提供一些已经设计好的菜单模板 并且可以建立 自己的菜单模板 在打开菜单编辑器后 单击鼠标右键 在出现的快捷键中选择 Insert from Template 命名 出现如图所示的对话框 用户还可建立自己的模板 在模板编辑器中编辑完某一菜单 那么在打开菜单编辑器后 可以单击鼠标右键选择 Save as Template 命名 保存即可 若用户要删除某个模板 则只需选择 Delete Template 命名 删除即可 10 1 2 弹出式菜单弹出式菜单 弹出式菜单能以更加灵活的方式为用户提供更加便利的操作 当用户在不同位置单击鼠标右键 则显示一组不同的菜单项 Popumenu 组件在 standard 标签中 其设计方法与 mainmenu 基本相同 例例 10 410 4 以 例 10 3 为基础增加弹出式菜单 使得在窗体中 单击鼠标右键显示字体的子菜单项 在 Label1 中单击鼠标右键显 示格式的子菜单项 1 建立两个 PopupMenu 菜单项 PopupMenu1 为字体的子菜 单项 PopupMenu2 为格式的子菜单项 2 在 Form1 的对象监视器中选取 PopupMenu 属性 点击向下 箭头选取 PopupMenu1 在 Label1 的对象监视器中选取 PopupMenu 属性 点击向下箭头选取 PopupMenu2 3 编辑菜单项 和 OnClick 事件代码 同例 10 3 10 2 工具栏工具栏 工具栏构件主要设计 Windows 应用程序的工具栏 位于构件栏的 Win32 选项卡 本节主要讲授 如何设置工具栏 工具栏的改进 10 2 110 2 1 如何设置工具栏如何设置工具栏 在 Delphi 中工具栏组件 TToolBar 和工具按钮组件 TToolButton 位于 Win32 页中 工具栏按钮组件 TToolButton 不能和其它窗口组件连用 只能放于工具栏组件 上 工具栏属性 TToolBar 工具栏按钮 TToolButton 属性 例例 10 5 在 例例 10 3 中添加工具按钮 1 在 form1 上添加工具栏组件 ToolBar1 属性名 属性值说明 Align Altop始终在窗体上部 Flat False按钮边框的格式为普通边界 List False 图标在按钮中央 标题在图 标下方 Showcaption True按钮显示文本标题 ImagesImagelist1按钮显示 Imagelist1 中的图标 2 在工具栏上添加工具栏按钮组件 方法为右键单击工具栏组件 弹出快捷 键 选择 Newbutton 项 则可以添加一个按钮 按照此法 添加 8 个按钮 其 中 Toolbutton1 Toolbutton4 的 Caption 属性为 宋体 隶书 楷体 黑体 Toolbutton5 Toolbutton8 的 Captio

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论