动态建立菜单后,怎样让点击菜单时执行指定的代码呢 ( 积分: 50 )

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

gzntzxj

Unregistered / Unconfirmed
GUEST, unregistred user!
我想用一个表来建立一个菜单,相应执行的表单名存入一个字段中
怎样才能让点击菜单时执行相应的表单呢;
我愿出50分

procedure TForm1.Button1Click(Sender: TObject);
var
str,str1,fm_name:string;
i,j:integer;
itm,itm2:tmenuitem;
begin
adoquery1.SQL.Clear;
str:='select * from menutb2 where userid=''A01'+''''+' AND MOBJID=1';
adoquery1.SQL.add(str);
adoquery1.ExecSQL ;
adoquery1.Active := true;
adoquery1.First;
for i := 0 to adoquery1.RecordCount-1 do
begin
itm:=tmenuitem.Create(self);
str:= trim(adoquery1.fieldbyname('mname').Value) ;
str1:=trim(adoquery1.fieldbyname('mprompt').Value);
itm.Name:=str ;
itm.Caption:=str1;
mainmenu1.Items.Add(itm);
adoquery2.SQL.Clear ;
adoquery2.SQL.Add('select * from menutb2 where userid=''A01'+''''+' AND mobjid=3 and leavelname='''+str1+'''');
adoquery2.ExecSQL;
adoquery2.Active:=true;
adoquery2.First;

itm2:=mainmenu1.Items.Items;
for j:=0 to adoquery2.RecordCount-1 do
begin
itm:=tmenuitem.Create(self);
str:= itm2.Name+'_'+inttostr(j) ;
str1:=trim(adoquery2.fieldbyname('mprompt').Value);
fm_name:=trim(adoquery2.fieldbyname('fmname').value); //这是我要执行表单
itm.Name:=str ;
if str1<>'-' then
itm.Caption:=str1
else
itm.caption:='-';
//
请问我要怎样才能点击菜单项后执行fm_name表单呢
//
itm2.Add(itm);
adoquery2.Next;
end;
adoquery1.Next;
end;

end;
 
我想用一个表来建立一个菜单,相应执行的表单名存入一个字段中
怎样才能让点击菜单时执行相应的表单呢;
我愿出50分

procedure TForm1.Button1Click(Sender: TObject);
var
str,str1,fm_name:string;
i,j:integer;
itm,itm2:tmenuitem;
begin
adoquery1.SQL.Clear;
str:='select * from menutb2 where userid=''A01'+''''+' AND MOBJID=1';
adoquery1.SQL.add(str);
adoquery1.ExecSQL ;
adoquery1.Active := true;
adoquery1.First;
for i := 0 to adoquery1.RecordCount-1 do
begin
itm:=tmenuitem.Create(self);
str:= trim(adoquery1.fieldbyname('mname').Value) ;
str1:=trim(adoquery1.fieldbyname('mprompt').Value);
itm.Name:=str ;
itm.Caption:=str1;
mainmenu1.Items.Add(itm);
adoquery2.SQL.Clear ;
adoquery2.SQL.Add('select * from menutb2 where userid=''A01'+''''+' AND mobjid=3 and leavelname='''+str1+'''');
adoquery2.ExecSQL;
adoquery2.Active:=true;
adoquery2.First;

itm2:=mainmenu1.Items.Items;
for j:=0 to adoquery2.RecordCount-1 do
begin
itm:=tmenuitem.Create(self);
str:= itm2.Name+'_'+inttostr(j) ;
str1:=trim(adoquery2.fieldbyname('mprompt').Value);
fm_name:=trim(adoquery2.fieldbyname('fmname').value); //这是我要执行表单
itm.Name:=str ;
if str1<>'-' then
itm.Caption:=str1
else
itm.caption:='-';
//
请问我要怎样才能点击菜单项后执行fm_name表单呢
//
itm2.Add(itm);
adoquery2.Next;
end;
adoquery1.Next;
end;

end;
 
首先可以在TForm1中声明一个方法, 示例如下:

procedure OnMyMenuClick(Sender: TObject);

然后可以在你的
itm:=tmenuitem.Create(self);
后面加上
itm.OnClick := OnMyMenuClick;

在OnMyMenuClick的实现部分写你要调用的代码即可
 
首先可以在TForm1中声明一个方法, 示例如下:

procedure OnMyMenuClick(Sender: TObject);

注: 在上一封加复中, 我本来想关键字粗体显示, 没想到论坛这么土

然后可以在你的
itm:=tmenuitem.Create(self);
后面加上
itm.OnClick := OnMyMenuClick;

在OnMyMenuClick的实现部分写你要调用的代码即可
 
试一下,如果可行的话立即给分
刚试过,用这个方法可行,但是我要在OnMyMenuClick中怎样才能确定是那个菜单执行了click事件呢
 
通过Sender: TObject就可以取得菜单项的信息了
 
我比较笨一些,能否举个例

通过Sender: TObject就可以取得菜单项的信息了
 
TMenuItem(Sender).xxx
 
多人接受答案了。
 
后退
顶部