使控件与 TreeNode 节点位置同步

wealsh 2010-02-22 09:13:48
在 CustomDrawItem 处理,当拖动垂直滚动条时 如何使用控件与 Node 的位置同步?

var
R:TRect;

R:=Node.DisplayRect(True);

控件.Left:=R.Left;
控件.Top:=R.Top;
...全文
81 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
wealsh 2010-02-22
  • 打赏
  • 举报
回复
创建时把 edit 的 parent 设置为 treeview 效果会不会更好?
wealsh 2010-02-22
  • 打赏
  • 举报
回复
上面的效果不错,主要还是 滚动时 位置同步的问题,希望一起研究研究。
lihuasoft 2010-02-22
  • 打赏
  • 举报
回复

试了一下, 但控制不好, 包括一楼的代码, 在滚动时也有问题, 或许是解决问题的方向错了


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;
wealsh 2010-02-22
  • 打赏
  • 举报
回复
如果动态创建了多个 edit, 拖动垂直滚动条时如果保持位置同步?

比如 edit1 对应 node1 ...
lihuasoft 2010-02-22
  • 打赏
  • 举报
回复

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;

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧