for i:=1 to MainMenu1.Items.Count do
for j:=1 to MainMenu1.Items[i-1].Count do
MainMenu1.Items[i-1][j-1].onClick:=track;
procedure track(sender: TObject);
begin
//do someting
//??怎样再运行原来的onclick事件?
end;
...全文
8112打赏收藏
运行时期在menuitem中加入事件
for i:=1 to MainMenu1.Items.Count do for j:=1 to MainMenu1.Items[i-1].Count do MainMenu1.Items[i-1][j-1].onClick:=track; procedure track(sender: TObject); begin //do someting //??怎样再运行原来的onclick事件? end;
试一试:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
MainMenu1: TMainMenu;
a1: TMenuItem;
aa1: TMenuItem;
bb1: TMenuItem;
cc1: TMenuItem;
procedure aa1Click(Sender: TObject);
procedure bb1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure track(sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MyClick:array[0..100,0..100] of TNotifyEvent;
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.aa1Click(Sender: TObject);
begin
showmessage('aa');
end;
procedure TForm1.bb1Click(Sender: TObject);
begin
showmessage('bb');
end;
procedure TForm1.track(sender: TObject);
var
i,j:integer;
OldClick:array[0..100,0..100] of TNotifyEvent;
begin
Showmessage('Click');
//////////////////////////////////////////////////////////
i:=1;
j:=(Sender as TMenuItem).MenuIndex+1;
OldClick[i,j]:=(Sender as TMenuItem).onclick;
(Sender as TMenuItem).onclick:=MyClick[i,j];
(Sender as TMenuItem).click;
(Sender as TMenuItem).onclick:= OldClick[i,j];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:integer;
begin
for i:=1 to MainMenu1.Items.Count do
for j:=1 to MainMenu1.Items[i-1].Count do
begin
MyClick[i,j]:=MainMenu1.Items[i-1][j-1].onClick;
MainMenu1.Items[i-1][j-1].onClick:=track;
end;
end;
end.
什么意思,原来菜单已经写好事件,现在要改为track,然后再改回原来的事件,是吗?
试试看
for i:=1 to MainMenu1.Items.Count do
for j:=1 to MainMenu1.Items[i-1].Count do
MainMenu1.Items[i-1][j-1].onClick:=track;
procedure track(sender: TObject);
begin
//do someting
菜单名称Click(sender: TBoject); //菜单名称Click是原来的事件
end;