在DLL中定义的一个类
……
type
TIMMenu = class
public
procedure IMClick(Sender: TObject);
end;
……
procedure TIMMenu.IMClick(Sender: TObject);
begin
ShowMessage('Hello, world');
end;
……
//FormatIMMenu过程将下列两个子菜单添加到itmMenu上
procedure FormatIMMenu(AOwner: TComponent;var itmMenu: TMenuItem); stdcall;
……
mnuItem := TIMMenu.Create;
subMnu[0] := TMenuItem.Create(AOwner);
subMnu[0].Caption := 'A';
subMnu[0].OnClick := mnuItem.IMClick;
itmMenu.Add(subMnu[0]); subMnu[1] := TMenuItem.Create(AOwner);
subMnu[1].Caption := 'B';
subMnu[1].OnClick := mnuItem.IMClick;
itmMenu.Add(subMnu[1]);
……
第一个子菜单A的单击事件有效,会ShowMessage,第二个子菜单B的单击事件死活就是无效。怎么回事啊?在主程序中把子菜单B的单击事件赋给随便一个按钮的OnClick事件,就可以ShowMessage出来!
……
type
TIMMenu = class
public
procedure IMClick(Sender: TObject);
end;
……
procedure TIMMenu.IMClick(Sender: TObject);
begin
ShowMessage('Hello, world');
end;
……
//FormatIMMenu过程将下列两个子菜单添加到itmMenu上
procedure FormatIMMenu(AOwner: TComponent;var itmMenu: TMenuItem); stdcall;
……
mnuItem := TIMMenu.Create;
subMnu[0] := TMenuItem.Create(AOwner);
subMnu[0].Caption := 'A';
subMnu[0].OnClick := mnuItem.IMClick;
itmMenu.Add(subMnu[0]); subMnu[1] := TMenuItem.Create(AOwner);
subMnu[1].Caption := 'B';
subMnu[1].OnClick := mnuItem.IMClick;
itmMenu.Add(subMnu[1]);
……
第一个子菜单A的单击事件有效,会ShowMessage,第二个子菜单B的单击事件死活就是无效。怎么回事啊?在主程序中把子菜单B的单击事件赋给随便一个按钮的OnClick事件,就可以ShowMessage出来!
mnuItem := TIMMenu.Create;
subMnu[0] := TMenuItem.Create(AOwner);
subMnu[0].Caption := 'A';
subMnu[0].OnClick := mnuItem.IMClick; subMnu[1] := TMenuItem.Create(AOwner);
subMnu[1].Caption := 'B';
subMnu[1].OnClick := mnuItem.IMClick;
itmMenu.Add(subMnu);
subMnu[0].OnClick := TIMMenu.IMClick;
subMnu[1].OnClick := TIMMenu.IMClick;