有注释,自己看吧。pas文件:unit Unit1;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, ComCtrls, ExtCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; Splitter1: TSplitter; ListView1: TListView; PopupMenu1: TPopupMenu; ThisisaTreeNode1: TMenuItem; PopupMenu2: TPopupMenu; Thisisalistitem1: TMenuItem; procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssRight in Shift) // 是右击 and Assigned(TreeView1.GetNodeAt(X,Y)) then // 是一个节点 begin with TreeView1.ClientToScreen( Point(X,Y) ) do // 转换坐标 PopupMenu1.Popup( x, y ); // 弹出 end; end;procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin if (ssRight in Shift) // 是右击 and Assigned(ListView1.GetItemAt(X,Y)) then // 是一个项目 begin with TreeView1.ClientToScreen( Point(X,Y) ) do // 转换坐标到屏幕 PopupMenu2.Popup( x, y ); // 弹出 end; end;end.dfm文件:object Form1: TForm1 Left = 2 Top = 107 Width = 696 Height = 480 Caption = 'Form1' Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Splitter1: TSplitter Left = 121 Top = 0 Width = 3 Height = 453 Cursor = crHSplit end object TreeView1: TTreeView Left = 0 Top = 0 Width = 121 Height = 453 Align = alLeft Indent = 19 TabOrder = 0 OnMouseDown = TreeView1MouseDown Items.Data = { 010000001A0000000000000000000000FFFFFFFFFFFFFFFF0000000002000000 01611A0000000000000000000000FFFFFFFFFFFFFFFF00000000000000000162 1A0000000000000000000000FFFFFFFFFFFFFFFF000000000100000001631A00 00000000000000000000FFFFFFFFFFFFFFFF00000000000000000164} end object ListView1: TListView Left = 124 Top = 0 Width = 564 Height = 453 Align = alClient Columns = <> Items.Data = { 500000000300000000000000FFFFFFFFFFFFFFFF000000000000000003616161 00000000FFFFFFFFFFFFFFFF00000000000000000362626200000000FFFFFFFF FFFFFFFF000000000000000003636363} TabOrder = 1 OnMouseDown = ListView1MouseDown end object PopupMenu1: TPopupMenu Left = 55 Top = 104 object ThisisaTreeNode1: TMenuItem Caption = 'This is a Tree Node' end end object PopupMenu2: TPopupMenu Left = 259 Top = 90 object Thisisalistitem1: TMenuItem Caption = 'This is a list item' end end end小说明,右边一个TreeView,中间一个TSplitter,右边是一个ListView
标准答案: procedure TForm1.lvwMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Begin if (htOnItem in lvw.GetHitTestInfoAt(X,Y)) and ((Button=mbRight)then DiSomething... End;
各位可否有比较好的方法呢?
调用Menu.PopUp;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, ComCtrls, ExtCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Splitter1: TSplitter;
ListView1: TListView;
PopupMenu1: TPopupMenu;
ThisisaTreeNode1: TMenuItem;
PopupMenu2: TPopupMenu;
Thisisalistitem1: TMenuItem;
procedure TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (ssRight in Shift) // 是右击
and Assigned(TreeView1.GetNodeAt(X,Y)) then // 是一个节点
begin
with TreeView1.ClientToScreen( Point(X,Y) ) do // 转换坐标
PopupMenu1.Popup( x, y ); // 弹出
end;
end;procedure TForm1.ListView1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if (ssRight in Shift) // 是右击
and Assigned(ListView1.GetItemAt(X,Y)) then // 是一个项目
begin
with TreeView1.ClientToScreen( Point(X,Y) ) do // 转换坐标到屏幕
PopupMenu2.Popup( x, y ); // 弹出
end;
end;end.dfm文件:object Form1: TForm1
Left = 2
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Splitter1: TSplitter
Left = 121
Top = 0
Width = 3
Height = 453
Cursor = crHSplit
end
object TreeView1: TTreeView
Left = 0
Top = 0
Width = 121
Height = 453
Align = alLeft
Indent = 19
TabOrder = 0
OnMouseDown = TreeView1MouseDown
Items.Data = {
010000001A0000000000000000000000FFFFFFFFFFFFFFFF0000000002000000
01611A0000000000000000000000FFFFFFFFFFFFFFFF00000000000000000162
1A0000000000000000000000FFFFFFFFFFFFFFFF000000000100000001631A00
00000000000000000000FFFFFFFFFFFFFFFF00000000000000000164}
end
object ListView1: TListView
Left = 124
Top = 0
Width = 564
Height = 453
Align = alClient
Columns = <>
Items.Data = {
500000000300000000000000FFFFFFFFFFFFFFFF000000000000000003616161
00000000FFFFFFFFFFFFFFFF00000000000000000362626200000000FFFFFFFF
FFFFFFFF000000000000000003636363}
TabOrder = 1
OnMouseDown = ListView1MouseDown
end
object PopupMenu1: TPopupMenu
Left = 55
Top = 104
object ThisisaTreeNode1: TMenuItem
Caption = 'This is a Tree Node'
end
end
object PopupMenu2: TPopupMenu
Left = 259
Top = 90
object Thisisalistitem1: TMenuItem
Caption = 'This is a list item'
end
end
end小说明,右边一个TreeView,中间一个TSplitter,右边是一个ListView
procedure TForm1.lvwMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
Begin
if (htOnItem in lvw.GetHitTestInfoAt(X,Y)) and ((Button=mbRight)then
DiSomething...
End;
若点中了就使用POPmenu菜单,至于参数吗,就是你getnodeat的返回值
绝对正确!