procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var R: TRect; begin with Sender do if Selected <> nil then if Node = Selected then begin R := Node.DisplayRect(True); Self.edt1.Left := R.Left+Left; Self.edt1.Top := R.Top+Top; end; end;
试了一下, 但控制不好, 包括一楼的代码, 在滚动时也有问题, 或许是解决问题的方向错了 procedure TForm1.FormCreate(Sender: TObject); var I: Integer; N: TTreeNode; P: Pointer; begin for I := 1 to 20 do begin N := Self.TreeView1.Items.Add(nil, '节点'+InttoStr(I)); with TEdit.Create(Self) do begin asm mov P, eax; end; Width := 50; Height := 14; Left := 30; Top := 20*I; Parent := Self; Visible := False; N.Data := P; end; end; Self.TreeView1.FullExpand; end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView; Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean); var R: TRect; begin //if (Node <> nil) then begin R := Node.DisplayRect(True); with TEdit(Node.Data) do begin Visible := Node.IsVisible; Left := R.Left + Sender.Left; Top := R.Top + Sender.Top; Text := Node.Text; end; //end; end;
procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
R: TRect;
begin
with Sender do
if Selected <> nil then
if Node = Selected then begin
R := Node.DisplayRect(True);
Self.edt1.Left := R.Left+Left;
Self.edt1.Top := R.Top+Top;
end;
end;
试了一下, 但控制不好, 包括一楼的代码, 在滚动时也有问题, 或许是解决问题的方向错了
procedure TForm1.FormCreate(Sender: TObject);
var
I: Integer;
N: TTreeNode;
P: Pointer;
begin
for I := 1 to 20 do begin
N := Self.TreeView1.Items.Add(nil, '节点'+InttoStr(I));
with TEdit.Create(Self) do begin
asm
mov P, eax;
end;
Width := 50;
Height := 14;
Left := 30;
Top := 20*I;
Parent := Self;
Visible := False;
N.Data := P;
end;
end;
Self.TreeView1.FullExpand;
end;procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
var
R: TRect;
begin
//if (Node <> nil) then begin
R := Node.DisplayRect(True);
with TEdit(Node.Data) do begin
Visible := Node.IsVisible;
Left := R.Left + Sender.Left;
Top := R.Top + Sender.Top;
Text := Node.Text;
end;
//end;
end;