在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
这里所谓的动态菜单是指菜单项是变化的,它随程序的操作变化而变化。例如在很多应用程序的“文件”菜单下列出了最近多少次曾经使用过的文件名,这是最常见的动态菜单用法,Microsoft Word 的“文件”菜单就是一例。 动态菜单的使用为操作应用程序提供了极大的方便。用Delphi编写应用程序我们也可以实现这样的功能,其步骤如下。 ① 首先要确定程序的动态菜单的数据来源(这个数据为一个字符串,就是我们在菜单上看到的菜单标题,以下称之为“动态菜单标题”),即要确定动态菜单标题是来自Windows的系统注册表,还是来自一个数据库,还是来自一个子目录,这要看程序的功能而定。这里假设主窗体名为MainForm,上面已有主菜单,其动态菜单的数据源是一个String类型的变量,名称为SubMenuItemSource; ② 确定生成的动态菜单要做什么事情,也即要定义动态菜单的OnClick()事件,例如,动态菜单标题来自一个磁盘文件名时,那么程序在响应OnClick()事件时可能的操作是要打开选中的文件。为此我们要在菜单所在的主窗体模块的单元程序的数据定义Type后添加一个自定义的事件过程MyClick(),如下: unit MainForm; ┇ type ┇ procedure MyClick(Sender: TObject); //自定义动态菜单响应事件 ┇ end; 然后要编写MyClick的具体内容,示例如下: procedure TMainForm.MyClick(Sender: TObject); //动态菜单OnClick事件响应 begin ShowMessage(TMenuItem(Sender).Caption);//显示选中的动态菜单标题, end; 这里调用ShowMessage标准例程(在Dialogs.pas中)显示TMenuItem(Sender).Caption,它就是选择的菜单项Caption,类似用TMenuItem(Sender).Name则是选择的菜单项的Name。当然在这里MyClick()(就是OnClick事件)仅显示一个选中的菜单标题,但你可以改变其内容,使其完成其它你需要的工作,重要的是要知道TMenuItem(Sender).Caption; ③ 编写程序将动态菜单标题添加到指定的菜单顶下,并将其与OnClick()事件联系起来。 将以下程序段添加到MainForm的OnCreate事件过程中,可在程序启动时完成动态菜单的动态生成: procedure TMainForm.FormCreate(Sender: TObject); var addSubItem:TMenuItem; i:Integer; begin for i:=0 to N do //N等于要添加的动态菜单数目,需事先定义为数值型变量,并赋值 begin addSubItem:= TMenuItem.Create(Self); addSubItem.Name := ‘A’+IntToStr(i); addSubItem.Caption := SubMenuItemSource; // 步骤①的SubMenuItemSource应先赋值 FileOpenItem.Add(addSubItem); //在名称为FileOpenItem的菜单项下添加子菜单 addSubItem.OnClick:=MyClick; // 步骤②的MyClick(),自定义菜单要响应的事件 end end; 上述方法的特点是在程序编写中,不需要使用Windows 消息则可完成动态菜单设计。如果要使用Windows 消息,Delphi也可以做到,但要响应TApplication的OnMessage事件。 上述方法同样可在C++Builder中使用,只需要改变其语法为C++。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论