数据库表MENU_LIST
MNBH MNNAME EVENT TYPE
M0001 日报表 kqrb.show 子窗体
M0002 汇总表 kqhz.show 子窗体
M0003 计算器 calc.exe 外部程序
我现在的做法是这样子的:
在主窗体onshow时 qryM.First;
for I:=0 to qryM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Name := qryMMNBH.Value;
MM.Caption := '['+qryMMNNAME.Value+']';
MM.OnClick := ??????????????????????? //这里怎么写啊?写成:MM.OnClick := qryMTYPE.Value????? 不可能吧。。
Main_Menu.Items.Add(MM); ADOQM.Next;
end; 以上红色部份不会做啊,菜单项是出来了,可是菜单项的单击事件却没有。要怎么做呢。
MNBH MNNAME EVENT TYPE
M0001 日报表 kqrb.show 子窗体
M0002 汇总表 kqhz.show 子窗体
M0003 计算器 calc.exe 外部程序
我现在的做法是这样子的:
在主窗体onshow时 qryM.First;
for I:=0 to qryM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Name := qryMMNBH.Value;
MM.Caption := '['+qryMMNNAME.Value+']';
MM.OnClick := ??????????????????????? //这里怎么写啊?写成:MM.OnClick := qryMTYPE.Value????? 不可能吧。。
Main_Menu.Items.Add(MM); ADOQM.Next;
end; 以上红色部份不会做啊,菜单项是出来了,可是菜单项的单击事件却没有。要怎么做呢。
type
TForm1 = class(TForm)
...
private
{ Private declarations }
procedure OnMMClick(Sender: TObject);//定义菜单事件
public
{ Public declarations }
end;
implementation procedure TForm1.OnMMClick(Sender: TObject);
begin
...你的代码
end;然后
MM.OnClick:=OnMMClick;
MNBH MNNAME mtag
M0001 日报表 100
M0002 汇总表 200
M0003 计算器 300 qryM.First;
for I:=0 to qryM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Caption :=qryMMNNAME.Value;
MM.tag:=qrymtag.Value;
MM.OnClick:=OnMMClick;
Main_Menu.Items.Add(MM);
ADOQM.Next;
end; procedure TForm1.OnMMClick(Sender: TObject);
begin
case TMenuItem(Sender).tag of
100:Form1.show;
200:Form1.show;
300:Form3.show;
...
end;
end;
{ Private declarations }
public
{ Public declarations }
published
procedure MyClick(Sender:TObject);
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
@Button2.OnClick := self.MethodAddress('MyClick');
end;procedure TForm1.MyClick(Sender: TObject);
begin
ShowMessage('fsdaf');
end;这样应该是可以的了,相当于在一个类里把你的事件都写好,然后直接在类里用方法名字去找就可以了,方法名字放在数据库里
向gwhdaxia学习
去map里找.
好
for I:=0 to qryM.RecordCount-1 do
begin
MM:=TMenuItem.Create(Self);
MM.Name := qryMMNBH.Value;
MM.Caption := '['+qryMMNNAME.Value+']';
MM.OnClick := ??????????????????????? //这里怎么写啊?写成:MM.OnClick :=
MM.Hint:='藏一个什么,比如主键';
MM.Tag:=123;//藏一个什么,比如数字类型。 Main_Menu.Items.Add(MM); ADOQM.Next;
end;
procedure TForm1.OnMMClick(Sender: TObject);
var s:String;i:Integer;
begin
s:=(Sender as TMenuItem).Hint;
i:=(Sender as TMenuItem).Tag; ...你的代码 至少可以对应到数据库里去了。
end;