PopupMenu如何动态的产生Submenu?(50分)

  • 主题发起人 主题发起人 Gingerzy
  • 开始时间 开始时间
G

Gingerzy

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大侠:PopupMenu如何动态的产生Submenu? 谢谢!
 
procedure TDBMDIChildForm.MasterAfterOpen(DataSet: TDataSet);
//主表打开后生成排序菜单
var
i:integer;
mi:TMenuItem;
begin
inherited;
for i:=0 to adsMaster.FieldCount -1 do
begin
mi:=TMenuItem.Create(self);
with mi do
begin
Caption := adsMaster.Fields.FieldName;
Hint := adsMaster.Fields.FieldName;
Tag := i;
OnClick := SortFields; //指定菜单事件
end;
pmSortField.Items.Add(mi);
end;
end;

procedure TDBMDIChildForm.SortFields(Sender: TObject);
//菜单事件,按字段排序
begin
inherited;
if TComponent(sender).Tag=-1 then
SortField(ADSMaster,sMasterSortFields,'')
else
SortField(ADSMaster,sMasterSortFields,TMenuItem(sender).Hint);
end;
 
可以试验一下,应该是对的
 
这不是白送分吗?同ysai,ysai真幸运!比我早到了一步
 
那么该PopupMenu的Submenu的单击事件该怎样写呀?谢谢了先!
 
ysai程序如下,红色部分为指定单击事件,他程序里面写得很完整了
---------------------------------------------
procedure TDBMDIChildForm.MasterAfterOpen(DataSet: TDataSet);
//主表打开后生成排序菜单
var
i:integer;
mi:TMenuItem;
begin
inherited;
for i:=0 to adsMaster.FieldCount -1 do
begin
mi:=TMenuItem.Create(self);
with mi do
begin
Caption := adsMaster.Fields.FieldName;
Hint := adsMaster.Fields.FieldName;
Tag := i;
[red]OnClick := SortFields; //指定菜单事件[/red]
end;
pmSortField.Items.Add(mi);
end;
end;

procedure TDBMDIChildForm.[red]SortFields[/red](Sender: TObject);
//菜单事件,按字段排序
begin
inherited;
if TComponent(sender).Tag=-1 then
SortField(ADSMaster,sMasterSortFields,'')
else
SortField(ADSMaster,sMasterSortFields,TMenuItem(sender).Hint);
end;
 
多人接受答案了。
 
后退
顶部