DELPHI中怎样动态生成菜单?

gcjp 2003-01-24 08:34:50
如题
...全文
179 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyq_123 2003-01-24
  • 打赏
  • 举报
回复
光辉兄,结贴ehom(?!)和CG1120每人五十。
zyq_123 2003-01-24
  • 打赏
  • 举报
回复
非常高兴,我的下一级菜单代表与楼上的相同!也就是说成功了!感谢楼上各位!特别鸣谢:楼上的!
ehom 2003-01-24
  • 打赏
  • 举报
回复
var
SubMenu1,SubMenu2:TMenuItem;
begin
SubMenu1:=TMenuItem.Create(Self);
SubMenu1.Caption:='Test';
MainMenu.Items.Add(SubMenu1);
SubMenu2:=TMenuItem.Create(Self);
SubMenu2.Caption:='Test';
SubMenu1.Add(SubMenu2);
end;
zyq_123 2003-01-24
  • 打赏
  • 举报
回复
从第一级开始

MainMenu: TMainMenu;
PopupMenu: TPopupMenu;

var
SubMenu:TMenuItem;
begin
SubMenu:=TMenuItem.Create(Self);
SubMenu.Caption:='Test';
MainMenu.Items.Add(SubMenu);//PopupMenu一样
//插入用MainMenu.Items.Insert(0,SubMenu);
end;

下一级用相关MenuItem的Add,Insert!

谁能补充完整,使之能加入下一级菜单!
zyq_123 2003-01-24
  • 打赏
  • 举报
回复
cg1120(代码最优化-§新年祝福你,好运伴着你§)能给我动态生成菜单的完全代码吗?
Billy_Chen28 2003-01-24
  • 打赏
  • 举报
回复
动态生成菜单(主菜单):
type
TTestMenuItem = class(TMenuItem)
private
FFormClass: string;
public
procedure Click; override;
//Example
property FormClass: string read FFormClass write FFormClass;
end;
....
porcedure TTestMenuItem.Click;
begin
if FormClass <> '' then
//do something
end;
.....
procedure Test(AOwner: TComponent);
var Item: TTestMenuItem;
begin
Item := TTestMenuItem.Create(AOwner);
with Item do
begin
FormClass := 'TFormOne';
end;
MeinMenu.Items.Add(Item);
end;
Billy_Chen28 2003-01-24
  • 打赏
  • 举报
回复
动态生成菜单(快捷菜单):
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Db, Grids, DBGrids, DBTables, Menus;

type
TSave = procedure(Sender: TObject) of Object;

TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
procedure Save(Sender: TObject);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}


procedure TForm1.Save(Sender: TObject);
var
OpenDlg: TOpenDialog;
begin
OpenDlg := TOpenDialog.Create(Self);
OpenDlg.Execute;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
myPopupMenu: TPopupMenu;
myMenuItem: TMenuItem;
i: integer;
p: TPoint;
begin
myPopupMenu := TPopupMenu.Create(Self);
for i := 1 to 3 do
begin
myMenuItem := TMenuItem.Create(myPopupMenu);
myMenuItem.Tag := i;
case i of
1: myMenuItem.Caption := '新建';
2: begin
myMenuItem.Caption := '保存';
myMenuItem.OnClick := Save;
end;
3: myMenuItem.Caption := '删除';
end;
myPopupMenu.Items.Add(myMenuItem);
end;
GetCursorPos(p);
myPopupMenu.Popup(p.x,p.y)
end;


end.
ehom 2003-01-24
  • 打赏
  • 举报
回复
话不是怎么说,隐藏/显示也只是知道菜单数和内容时才能用,如果不知道呢?比如插件,每次程序运行时才知道插件的内容和数量!
yczyk 2003-01-24
  • 打赏
  • 举报
回复
其实可以控制菜单项的可视属性就行了!那样的工作量可能会少点!
ehom 2003-01-24
  • 打赏
  • 举报
回复
从第一级开始

MainMenu: TMainMenu;
PopupMenu: TPopupMenu;

var
SubMenu:TMenuItem;
begin
SubMenu:=TMenuItem.Create(Self);
SubMenu.Caption:='Test';
MainMenu.Items.Add(SubMenu);//PopupMenu一样
//插入用MainMenu.Items.Insert(0,SubMenu);
end;

下一级用相关MenuItem的Add,Insert!
zyq_123 2003-01-24
  • 打赏
  • 举报
回复
up

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧