unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, Menus;type TForm1 = class(TForm) MainMenu1: TMainMenu; aaa1: TMenuItem; bbb1: TMenuItem; ccc1: TMenuItem; ddd1: TMenuItem; eee1: TMenuItem; qqq1: TMenuItem; hhh1: TMenuItem; tv_1: TTreeView; Button1: TButton; Edit1: TEdit; procedure Button1Click(Sender: TObject); procedure ddd1Click(Sender: TObject); procedure bbb1Click(Sender: TObject); procedure tv_1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm} function getmidstr(str,s1,s2:string):string; //从取两个符号中间字符串 begin if s1='' then s1:='['; if s2='' then s2:=']'; result:=copy(str,pos(s1,str)+1,(pos(s2,str)-(pos(s1,str)+1))); end;procedure TForm1.Button1Click(Sender: TObject); procedure getsub(submenu:Tmenuitem;pid:string;subtree:Ttreenode); var j:integer; itemcount:integer; childtree:Ttreenode; begin itemcount:=submenu.Count; for j:=0 to itemcount-1 do begin if (submenu.Items[j].Caption<>'-') and (submenu.Items[j].Enabled) then childtree:=tv_1.Items.AddChild(subtree,submenu.items[j].Caption+'['+submenu.Items[j].Name+']'); if submenu.Items[j].Caption=null then begin exit; end else begin getsub(submenu.Items[j],pid+submenu.Items[j].Name+'.',childtree); end; end; end; var tree:ttreenode; begin tree:=tv_1.Items.AddFirst(nil,'系统菜单[top]'); getsub(form1.MainMenu1.Items,'',tree); end;procedure TForm1.ddd1Click(Sender: TObject); begin edit1.Text:='ddd单击'; end;procedure TForm1.bbb1Click(Sender: TObject); begin edit1.Text:='bbb单击,哈哈';end;procedure TForm1.tv_1Click(Sender: TObject); var menuname:string; menu :tmenuitem; begin if tv_1.Selected=nil then exit; menuname:=getmidstr(tv_1.Selected.Text,'[',']'); menu:=tmenuitem(form1.FindComponent(menuname)); if menu<>nil then if Assigned(menu.onClick) then menu.Click; end;end.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Menus;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
aaa1: TMenuItem;
bbb1: TMenuItem;
ccc1: TMenuItem;
ddd1: TMenuItem;
eee1: TMenuItem;
qqq1: TMenuItem;
hhh1: TMenuItem;
tv_1: TTreeView;
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure ddd1Click(Sender: TObject);
procedure bbb1Click(Sender: TObject);
procedure tv_1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}
function getmidstr(str,s1,s2:string):string; //从取两个符号中间字符串
begin
if s1='' then
s1:='[';
if s2='' then
s2:=']';
result:=copy(str,pos(s1,str)+1,(pos(s2,str)-(pos(s1,str)+1)));
end;procedure TForm1.Button1Click(Sender: TObject);
procedure getsub(submenu:Tmenuitem;pid:string;subtree:Ttreenode);
var
j:integer;
itemcount:integer;
childtree:Ttreenode;
begin
itemcount:=submenu.Count;
for j:=0 to itemcount-1 do
begin
if (submenu.Items[j].Caption<>'-') and (submenu.Items[j].Enabled) then
childtree:=tv_1.Items.AddChild(subtree,submenu.items[j].Caption+'['+submenu.Items[j].Name+']');
if submenu.Items[j].Caption=null then
begin
exit;
end
else
begin
getsub(submenu.Items[j],pid+submenu.Items[j].Name+'.',childtree);
end;
end;
end;
var
tree:ttreenode;
begin
tree:=tv_1.Items.AddFirst(nil,'系统菜单[top]');
getsub(form1.MainMenu1.Items,'',tree);
end;procedure TForm1.ddd1Click(Sender: TObject);
begin
edit1.Text:='ddd单击';
end;procedure TForm1.bbb1Click(Sender: TObject);
begin
edit1.Text:='bbb单击,哈哈';end;procedure TForm1.tv_1Click(Sender: TObject);
var
menuname:string;
menu :tmenuitem;
begin
if tv_1.Selected=nil then exit;
menuname:=getmidstr(tv_1.Selected.Text,'[',']');
menu:=tmenuitem(form1.FindComponent(menuname));
if menu<>nil then
if Assigned(menu.onClick) then
menu.Click;
end;end.
http://community.csdn.net/Expert/topic/4364/4364561.xml?temp=.5557978