zoukankan      html  css  js  c++  java
  • Delphi的动态菜单实现

     

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

  • 相关阅读:
    人脸识别算法初次了解
    白话经典算法系列之二 直接插入排序的三种实现
    常见浏览器兼容性问题与解决方式
    MP3的频率、比特率、码率与音质的关系
    程序猿接私活经验总结,来自csdn论坛语录
    Java虚拟机工作原理具体解释
    簡單SQL存儲過程實例
    全栈JavaScript之路(七)学习 Comment 类型节点.
    strdup函数的使用方法
    POJ 2823 Sliding Window 【单调队列】
  • 原文地址:https://www.cnblogs.com/smallmuda/p/1311661.html
Copyright © 2011-2022 走看看