怎么动态创建一个菜单项(20分)

  • 主题发起人 主题发起人 嫩手
  • 开始时间 开始时间

嫩手

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序运行后,动态的创建一个二级菜单,怎么建?比如在‘新建’下建一个
‘新建文件’,是popmenu
 
这是我自己的,你参写考一下
Menuname:=de.tmp.fieldbyname('菜单名称').asstring;
MenuCaption:=de.tmp.fieldbyname('菜单标题').asstring;
Mm := TMenuItem.Create(Self);
Mm.Name:=Menuname;
Mm.Caption :=MenuCaption+' (&'+de.tmp.fieldbyname('快捷键').asstring;
mainmenu2.Items.Add(mm);
 
和动态创建其它控件没什么区别呀。
var MI: TMenuItem;
MI := TMenuItem.Create(self);
MI.Caption := '新建文件';
MI.OnClick := MyMenuHandler;
N1.Add(MI);
。。。
procedure TBandForm.MyMenuHandler(Sender: TObject);
begin
...
end;
 
 所谓动态菜单是指菜单项随着程序的操作变化而变化。现在,我们用Delphi来实现这一功能,具体步骤如下:
  1.首先,确定动态菜单的数据来源,即要确定动态菜单标题是来自Windows的系统注册表,还是来自一个数据库,或者是来自一个子目录,主要由程序的功能而定。这里假设主窗口名为MainForm,上面已有主菜单,其动态菜单的数据源是一个String(字符串)类型的变量,名称为SubMenuItemSource。
  2.确定生成的动态菜单的功能,即定义动态菜单的OnClick()事件,例如,动态菜单标题来自一个磁盘文件名时,那么程序在响应OnClick()事件时,可能的操作是要打开选中的文件。因此,对菜单所在的主窗口模块的单元程序的数,据我们需要定义Type后添加一个自定义的事件MyClick()。
  然后,需要编写如下MyClick()事件的具体内容:
  procedure TMainForm.MyClick(Sender: TObject);//动态菜单OnClick事件响应
  begin

  Show.Message(TMenuItem(Sender).Caption);//显示选中的动态菜单标题,
  end;

  这里调用的ShowMessage标准例程(在Dialogs.pas中)显示TMenuItem(Sender).Caption,它就是选择的菜单项的Caption,类似用TMenuItem(Sender).Name则是选择菜单项的Name。
  3.编写程序将动态菜单标题添加到指定的菜单顶下,并将其与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;
// 步骤1的SubMenuItemSource应先赋值
  FileOpenItem.Add(addSubItem);
//在名称为FileOpenItem的菜单项下添加子菜单
  addSubItem.OnClick:=MyClick;
// 步骤2的MyClick(),自定义菜单要响应的事件
  end
  end;
 
能不能给我一段通过的代码?上面的我在delphi7+winxp下通不过
 
如果自己不动动脑子,是不会有提高的。
报了什么错?
 
程序不响应
 
其实并不是不动脑子,我呢,没怎么学过,都是自己瞎闹,没人指导,资料也不知道去哪
找,哎!惨呐
 
菜单出现了吗?
 
直接拷贝稍微修改 
 procedure TMainForm.FormCreate(Sender: TObject);
  var
  addSubItem:TMenuItem;
  i:Integer;
  begin

  for i:=0 to 5 do
//比如要添加的 5个动态菜单数目,需事先定义为数值型变量,并赋值
  begin

  addSubItem:= TMenuItem.Create(Self);
  addSubItem.Name := ′A′+IntToStr(i);
//菜单名称
  addSubItem.Caption :='菜单标签';
  
FileOpenItem.Add(addSubItem);
//在名称为 FileOpenItem(改成你要添加到的菜单名称)的菜单项下添加子菜单
  //addSubItem.OnClick:=MyClick;
// 步骤2的MyClick(),你自定义菜单要响应的事件
  end
  end;
 
多人接受答案了。
 
后退
顶部