• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi的动态菜单实现

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

        这里所谓的动态菜单是指菜单项是变化的,它随程序的操作变化而变化。例如在很多应用程序的“文件”菜单下列出了最近多少次曾经使用过的文件名,这是最常见的动态菜单用法,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()事件联系起来。

将以下程序段添加到MainFormOnCreate事件过程中,可在程序启动时完成动态菜单的动态生成:

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也可以做到,但要响应TApplicationOnMessage事件。

上述方法同样可在C++Builder中使用,只需要改变其语法为C++


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB学习笔记(十一)——MATLAB图形用户界面设计发布时间:2022-07-18
下一篇:
MATLAB(3)——GUI界面设计入门发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap