收藏 分享(赏)

第十章菜单与工具栏.doc

上传人:kpmy5893 文档编号:8137759 上传时间:2019-06-10 格式:DOC 页数:28 大小:173.50KB
下载 相关 举报
第十章菜单与工具栏.doc_第1页
第1页 / 共28页
第十章菜单与工具栏.doc_第2页
第2页 / 共28页
第十章菜单与工具栏.doc_第3页
第3页 / 共28页
第十章菜单与工具栏.doc_第4页
第4页 / 共28页
第十章菜单与工具栏.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、指针常用于描述动态存储结构的实现。动态存储结构中常用的有链表,堆栈,队列等存储结构。可以把堆栈和队列看成特殊的链表本节只是简单介绍一下如何利用指针和记录来实现链表结构。链表是一组元素的序列,在这个序列中每个元素总是与他前面的元素相链接(第一个元素除外)。这种关系可以通过指针来实现。链表中的元素称为节点,第一个节点称为表头,最后一个称为表尾。指向表头的指针称为头指针,在这个头指针里存放着表头的地址。节点一般用记录来描述,描述节点的记录至少含有两个域,一个用来存放数据,该域的类型根据要存放的数据而定,称为值域;另一个用来存放下一个节点的地址,称为指针域。表尾不指向任何节点,其指针的值为 NIL。如

2、图:应用 Object LPascal 的指针和记录类型,图示的链表可以声明如下:Type Node:= Record;Data: Char;Next: Node;End;VarHead: Node; 或者:TypeLink = Node;Node:= RecordData: Char;Next: Node;End;Var Head: Link; 链表中相邻节点的地址是不连续的。当表头指针失去了指向表头的地址后,就无法找到整个链表,从而不能再对链表进行操作。同样,当任一节点中的指针失去了下一个节点后,链表就会断开,后边的节点就会全部消失。若让表尾节点原有的空指针指向表头节点,就成为循环链表。如

3、果链表的各节点既有指向前一个节点的指针又有指向后一个节点指针,这时的链表就称为双向链表。链表可以描述许多实际问题,区别只是链表的值域有所不同。对链表的操作有查找,插入,删除等。对于插入和删除操作来说,链表是很实用的数据结构。不论在链表的什么位置插入或删除节点,只需修改相应的指针。不必像顺序存储的数组那样需要移动数组中的每个元素。但对于链表来说,只有指针对用户来说是可见的。因此,要访问链表中某个节点的数据,必须从头指针开始依次搜索要访问的元素。队列和堆栈是特殊的链表。所谓队列就是一个先入先出表。在该表中只允许在表头插入节点,在表尾删除节点。向队列中插入节点称作入队,新节点入队后就成为队列的新表尾

4、;从队列的表头删除节点称为出队,出队后,其后继节点成为表头。由于队列的插入和删除操作分别在两端进行,所以要删除的节点将是队列中最先进入的节点。堆栈则允许在链表的表头进行插入和删除操作。这里表头称为栈顶,另一端为栈底。向一个堆栈中插入新节点成为入栈或压栈,新节点插入后成为新的栈顶节点;从堆栈中删除节点称为出栈或退栈,它是把栈顶节点删除掉,是其相邻的节点成为新的栈顶。由于插入和删除仅在栈顶一端进行,后进栈的节点必然会先被删除,所以堆栈又称为先进后出表。【例 9-1】 下列是一个关于在链表中利用指针处理字符串的程序。分析:该程序的功能是通过一个文本编辑框输入一个字符串,输入后将该字符串存入一个链表中

5、。每输入一次,在链表中新添一个节点。输入一些字符串后,单击“显示”按钮将输入的所有字符串显示在一个列表框中。通过文本编辑框输入的所有字符串显示在一个列表框中。通过文本框输入要查找的字符串,然后单击“删除”,将该字符串从链表中删除。此时再按下“显示”按钮,显示新的链表中的数据。设计时添加一个组件 Edit, 名为 Edit1,添加一个组件 Memo,名为 Memo1, 三个 Button 组件:“删除”名为 btnDel,“显示”名为btnList,“ 退出”名为 btnQuit。为了实现程序的功能,先声明一个全程的链表结构类型并命名一个该类型变量。这些在窗体单元的实现部分的开始处进行实现:im

6、plementation$R *.dfmtypepLink = Node;Node = recordData: string30;Next: pLink;end;varHead: pLink;当程序创建窗体时进行变量 Head 的初始化:procedure TForm1.FormCreate(Sender: TObject);beginHead:= Nil;end;当在文本编辑框中输入字符串并按下回车键后,在链表上添加一个新节点,并将输入的数据保存在该节点的数据域中,这个功能通过 Edit1 的 OnKeyPress 处理过程实现:procedure TForm1.Edit1KeyPress(

7、Sender: TObject; var Key: Char);vartempP, P: pLink;beginif Key = #13 then /如果按下回车键beginNew(tempP); /创建一个节点tempP.Data:= Edit1.Text;tempP.Next:= Nil;if Head = Nil then /如果链表为空表beginNew(Head); /创建链表Head:= tempP;endelse begin /如果链表不为空表P:= Head;while P.Next Nil dobeginMemo1.Lines.Add(P.Data);P:= P.Next;e

8、nd;end; 在 Edit1 输入框中输入一个字符串后,单击“删除”,程序将按该字符串在链表中查找相应的节点,找到后删除该节点:procedure TForm1.btnDelClick(Sender: TObject);varP,P1: pLink;i: integer;begini:=0;P:= Head;if P = nil thenShowMessage(链表为空)else if P.Data = Edit1.Text thenbegin /如果链表的第一个节点为要删除的节点Head:= P.Next;P.Next:= nil;P:= Head;endelse begin /如果链表的

9、第一个节点不是要删除的节点P1:= P.Next;if P1 0 thenLabel1.Left:= Label1.Left-20elseLabel1.Left:= Form1.ClientWidth;end;程序下载2、 菜单项改进方法 (1) 设置热键如图所示单击菜单项“文本内容”的 ShortCut 属性,会弹出一个下拉菜单,其中包含许多热键组合。例如按Alt+T ,则在用户使用键盘键入该热键组合同选择该菜单项功能相同。但他不同于在菜单项 Caption 属性中设置“ /“粗体”菜单项的事件代码beginif Label1.Font.Style*fsBold= then /集合的交运算b

10、eginLabel1.Font.Style:= Label1.Font.Style+fsBold;N10.Checked:= True;endelse beginLabel1.Font.Style:= Label1.Font.Style-fsBold;N10.Checked:= False;end;end;procedure TForm1.N11Click(Sender: TObject); /“斜体”菜单项的事件代码beginif Label1.Font.Style*fsItalic= then /集合的交运算beginLabel1.Font.Style:= Label1.Font.Styl

11、e+fsItalic;N11.Checked:= True;endelse beginLabel1.Font.Style:= Label1.Font.Style-fsItalic;N11.Checked:= False;end;end;procedure TForm1.N12Click(Sender: TObject); /“下划线”菜单项的事件代码beginif Label1.Font.Style*fsUnderline= then /集合的交运算beginLabel1.Font.Style:= Label1.Font.Style+fsUnderline;N12.Checked:= True

12、;endelse beginLabel1.Font.Style:= Label1.Font.Style-fsUnderline;N12.Checked:= False;endend;程序下载3、 设置单选菜单项在例 10-2 的基础上,将菜单项“文本字体” 下的子菜单项宋体、隶书、楷体、黑体中的 RadioItem 属性改为 true,即表示在同一组中的菜单项是单选的,并在选中的菜单项前显示圆点。而在同一组中菜单项的 GroupIndex 属性应设置为相同值,以表示在同一组中。【例 10-3】在 【例 10-2】 中添加单选菜单项procedure TForm1.N6Click(Sender:

13、 TObject);beginLabel1.Font.Name:= 宋体;N6.Checked:= True;end;procedure TForm1.N7Click(Sender: TObject);beginLabel1.Font.Name:= 隶书;N7.Checked:= True;end;procedure TForm1.N8Click(Sender: TObject);beginLabel1.Font.Name:= 楷书_GB2312;N8.Checked:= True;end;procedure TForm1.N9Click(Sender: TObject);beginLabel

14、1.Font.Name:= 黑体;N9.Checked:= True;end;程序下载4、 使用菜单摸板在 Delphi 中提供一些已经设计好的菜单模板,并且可以建立自己的菜单模板。在打开菜单编辑器后,单击鼠标右键,在出现的快捷键中选择“Insert from Template”命名,出现如图所示的对话框。用户还可建立自己的模板,在模板编辑器中编辑完某一菜单,那么在打开菜单编辑器后,可以单击鼠标右键选择“Save as Template”命名,保存即可。若用户要删除某个模板,则只需选择“Delete Template” 命名,删除即可。10.1.2 弹出式菜单弹出式菜单能以更加灵活的方式为用户

15、提供更加便利的操作,当用户在不同位置单击鼠标右键,则显示一组不同的菜单项。Popumenu 组件在 standard 标签中,其设计方法与 mainmenu基本相同。【例 10-4】以 【例 10-3】为基础增加弹出式菜单,使得在窗体中单击鼠标右键显示字体的子菜单项;在 Label1 中单击鼠标右键显示格式的子菜单项。1 建立两个 PopupMenu 菜单项,PopupMenu1 为字体的子菜单项, PopupMenu2 为格式的子菜单项。2 在 Form1 的对象监视器中选取 PopupMenu 属性,点击向下箭头选取 PopupMenu1,在 Label1 的对象监视器中选取PopupMe

16、nu 属性,点击向下箭头选取 PopupMenu2。3 编辑菜单项 ,和 OnClick 事件代码,同例 10-310.2 工具栏工具栏构件主要设计 Windows 应用程序的工具栏,位于构件栏的Win32 选项卡本节主要讲授:如何设置工具栏工具栏的改进 10.2.1 如何设置工具栏在 Delphi 中工具栏组件(TToolBar)和工具按钮组件(TToolButton)位于 Win32页中,工具栏按钮组件(TToolButton)不能和其它窗口组件连用,只能放于工具栏组件上。工具栏属性(TToolBar):工具栏按钮(TToolButton) 属性:【例 10-5】在【例 10-3】中添加工

17、具按钮:(1) 在 form1 上添加工具栏组件 ToolBar1。属性名 属性值 说明Align Altop 始终在窗体上部Flat False 按钮边框的格式为普通边界List False 图标在按钮中央,标题在图标下方Showcaption True 按钮显示文本标题Images Imagelist1 按钮显示 Imagelist1 中的图标(2)在工具栏上添加工具栏按钮组件,方法为右键单击工具栏组件,弹出快捷键,选择 Newbutton 项,则可以添加一个按钮。按照此法,添加 8 个按钮。其中 Toolbutton1-Toolbutton4 的 Caption 属性为“宋体” 、 “隶

18、书 ”、 “楷体”、 “黑体”,Toolbutton5-Toolbutton8 的 Caption 属性为空,Toolbutton 组件其余属性如表:。按钮 属性 属性值Style tbsCheckToolbutton1Toolbutton4 Grouped TureStyle tbsSeparatorToolbutton5Grouped FalseStyle tbsCheckToolbutton6Toolbutton8Grouped False(3)选择 Win32 页中的 Imagelist 组件,添加至窗口 Form1,双击 Imagelist 组件,出现如图所示的对话框,单击“Add”

19、 按钮添加图标如下,选择分别表示粗体、斜体、下划线的图标,其值依次为 0,1,2。在 Form1 窗体上选择组件Toolbutton6-Toolbutton8,将其 Imageindex 属性置为 0,1,2。(5) 编写每个工具栏按钮的 OnClick 事件代码如前:10.2.2 工具栏的改进 1 、工具栏的显示与隐藏有时,会要求隐藏某些工具栏以提供较多的空间,可以通过设置 Toolbar 组件的 Visible 属性来实现。【例 10-6】在 【例 10-5】 的基础上,添加一个按钮其属性改为“隐藏”,隐藏工具栏。procedure TForm1.Button2Click(Sender: TObject);beginif Button2.Caption = 隐藏 thenbeginButton2.Caption:= 显示;Toolbar1.Visible:= False;endelse beginButton2.Caption:= 隐藏;Toolbar1.Visible:= True;end;end;2、 工具栏的分组设置工具栏按钮的 Group 属性为 True,可将相邻的 Group 属性为 True 的按钮组成一组,右键单击工具栏组件,弹出快捷菜单,选择“NewSeparator”项,则可以添加分隔符,将 Group 属性为True 的按钮分为两组。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报