在 CustomDrawItem 处理,当拖动垂直滚动条时 如何使用控件与 Node 的位置同步?var
  R:TRect;  R:=Node.DisplayRect(True);   控件.Left:=R.Left;
  控件.Top:=R.Top;

解决方案 »

  1.   


    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;
      

  2.   

    如果动态创建了多个 edit, 拖动垂直滚动条时如果保持位置同步?比如 edit1 对应 node1 ...
      

  3.   


    试了一下, 但控制不好, 包括一楼的代码, 在滚动时也有问题, 或许是解决问题的方向错了
    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;
      

  4.   

    创建时把 edit 的 parent 设置为 treeview 效果会不会更好?