unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, Menus;type TForm1 = class(TForm) TreeView1: TTreeView; procedure FormCreate(Sender: TObject); procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } function CreateMenu(pCation:string):TPopupMenu; public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}function TForm1.CreateMenu(pCation: string): TPopupMenu; var pPopupMenu:TPopupMenu; pMenu:TMenuItem; i:integer; begin pPopupMenu:=TPopupMenu.Create(self); for i:=0 to 5 do begin pMenu:=TMenuItem.Create(pPopupMenu); pMenu.Caption:=pCation+inttostr(i); pPopupMenu.Items.Add(pMenu); end; result:=pPopupMenu; end;procedure TForm1.FormCreate(Sender: TObject); begin TreeView1.Items.AddObject(nil,'test',Pointer(CreateMenu('test'))); TreeView1.Items.AddObject(nil,'xxx',Pointer(CreateMenu('xxx'))); TreeView1.Items.AddObject(nil,'ddd',Pointer(CreateMenu('ddd'))); TreeView1.Items.AddObject(nil,'ccc',Pointer(CreateMenu('ccc'))); end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pNode:TTreeNode; begin pNode:=TreeView1.GetNodeAt(x,y); if (pNode<>nil) and (Button=mbRight) then TreeView1.PopupMenu:=TPopupMenu(pNode.data); end;end.
procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); var pNode:TTreeNode; begin if button=mbright then begin pNode:=TreeView1.GetNodeAt(x,y); if (pNode<>nil) then TreeView1.PopupMenu:=TPopupMenu(pNode.data); end end;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ComCtrls, Menus;type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
function CreateMenu(pCation:string):TPopupMenu;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}function TForm1.CreateMenu(pCation: string): TPopupMenu;
var
pPopupMenu:TPopupMenu;
pMenu:TMenuItem;
i:integer;
begin
pPopupMenu:=TPopupMenu.Create(self);
for i:=0 to 5 do
begin
pMenu:=TMenuItem.Create(pPopupMenu);
pMenu.Caption:=pCation+inttostr(i);
pPopupMenu.Items.Add(pMenu);
end;
result:=pPopupMenu;
end;procedure TForm1.FormCreate(Sender: TObject);
begin
TreeView1.Items.AddObject(nil,'test',Pointer(CreateMenu('test')));
TreeView1.Items.AddObject(nil,'xxx',Pointer(CreateMenu('xxx')));
TreeView1.Items.AddObject(nil,'ddd',Pointer(CreateMenu('ddd')));
TreeView1.Items.AddObject(nil,'ccc',Pointer(CreateMenu('ccc')));
end;procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
var
pNode:TTreeNode;
begin
pNode:=TreeView1.GetNodeAt(x,y);
if (pNode<>nil) and (Button=mbRight) then
TreeView1.PopupMenu:=TPopupMenu(pNode.data);
end;end.
Shift: TShiftState; X, Y: Integer);
var
pNode:TTreeNode;
begin
if button=mbright then
begin
pNode:=TreeView1.GetNodeAt(x,y);
if (pNode<>nil) then
TreeView1.PopupMenu:=TPopupMenu(pNode.data);
end
end;
dageming(执子之手,与子偕老)
你们这样的方法还是有问题呀,当我第一次右键点击某结点时能正确弹出相应菜单,但紧接着第二次在TREEVIEW中的空白处再点击右键时竟然还是但出第一次弹出的菜单,按理说我在空白处点击时应不弹出任何的菜单呀,但这个方法怎么会这样??