DoubleClick事件中如何获取鼠标所在的TTreeview节点(35分)

  • 主题发起人 主题发起人 月满C楼
  • 开始时间 开始时间

月满C楼

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
pt:Tpoint;
node:TTreeNode;
begin
GetCursorPos(pt);
ScreenToClient(pt);
node:=TreeView1.GetNodeAt(pt.X,pt.Y);
if node=nil then
exit;
caption:=node.Text;
end;

这样的代码老是获取不到
 
你应该在建TreeView1节点的时候,就
先把值附加进去
TreeView1.Items.AddObject(nil,MyRecPtr^.FName, MyRecPtr);

然后DOUBLEclick时把值取出来就行了
ShowForm(PMyRec(Selected.Data)^.FName,strtoint(PMyRec(Selected.Data)^.LName));
 
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
pt:Tpoint;
node:TTreeNode;
begin
GetCursorPos(pt);
TreeView1.ScreenToClient(pt);
node:=TreeView1.GetNodeAt(pt.X,pt.Y);
if node=nil then
exit;
caption:=node.Text;
end;
这样就行了
你不限定TreeView1。调用的就是Form的ScreenToClient。而GetNodeAt要求TreeView1的内部坐标。
 
楼上,你的也不行。
其实干吗那么复杂
procedure TForm1.TreeView1DblClick(Sender: TObject);
begin
caption:= TreeView1.Selected.Text;
end;

或者
procedure TForm1.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton;
Shift: TShiftState;
X, Y: Integer);
var
node:TTreeNode;
begin
node:=TreeView1.GetNodeAt(X,Y);
if node=nil then
exit;
caption:=node.Text;
end;
 
1:声明两个全局变量:Px,PY
2:procedure TForm1.TreeView1MouseMove(Sender: TObject;
Shift: TShiftState;
X,
Y: Integer);
begin
PX:=x;
PY:=y;
end;
3:procedure TForm1.TreeView1DblClick(Sender: TObject);
var
node:TTreeNode;
begin
node:=TreeView1.GetNodeAt(pX,py);
if node<>nil then
label4.caption:=node.Text
else
label4.Caption:='';
end
不过这个只双击在某外节点所在的行上就能选中节点,不知道这样是不是也能满足你的需要
 
lisongmagic。
首先你第一种方法。 我在TreeView的空处双击。失效
第二种方法更离谱。人家要双击你是MouseDown不管左键右键滚轮。
xcplates
你的太麻烦。
其实我的把TreeView1.ScreenToClient(pt)改成pt:=TreeView1.ScreenToClient(pt)就可以了。习惯了api里的使用方式。……。
procedure TForm1.TreeView1DblClick(Sender: TObject);
var
pt:Tpoint;
node:TTreeNode;
begin
GetCursorPos(pt);
pt:=TreeView1.ScreenToClient(pt);
node:=TreeView1.GetNodeAt(pt.X,pt.Y);
if node=nil then
exit;
caption:=node.Text;
end;
 
应该是欠了pt:=TreeView1.ScreenToClient(pt);
yin因为我以前做项目就这样做过
 
后退
顶部