我想找到放大/缩小 TVirtualStringTree 的“最佳方式”。
“放大”是指模仿放大镜。
必须优先使用 TVirtualStringTree 控件中专门用于此的属性/方法来理解“最佳方式”。如果不存在任何方法,则提出最简单的方法,避免使用低级 API。

为了更好地解释这个问题,
这是 TVirtualStringTree 初始状态的屏幕截图:
initial state http://didier.cabale.free.fr/temp/VST1.jpg
.. 这是 TVirtualStringTree 在其想要的状态下的屏幕截图:
wanted state http://didier.cabale.free.fr/temp/VST2.jpg

最佳答案

亲爱的迪迪埃(我的同人),

这是我所做的:
重要说明:这就是我所做的,但我不确定这是最佳解决方案,因此任何新想法都非常受欢迎!!

A. 在同一个事件处理程序中(例如 Edit 的 OnChange)。

  • 设置 TVirtualStringTree Font.SizeHeader :
    VirtualStringTree1.Header.Font.Size := UpDown1.Position;
    
  • 设置 TVirtualStringTree 节点的 Font.Size:
    VirtualStringTree1.Font.Size := UpDown1.Position;
    
  • 设置 TVirtualStringTree HeightHeader :
    VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
    
  • 设置 TVirtualStringTree Width 列的 Header :
    for i := 0 to VirtualStringTree1.Header.Columns.Count -1 do
      VirtualStringTree1.Header.Columns.Items[i].Width := Round(VirtualStringTree1.Header.Columns.Items[i].Width * Delta);
    

  • B. 在 TVirtualStringTree 的 OnMeasureTextHeight 事件处理程序上,设置其 NodeHeight[Node] 属性:
      Sender.NodeHeight[Node] := Round(Extent * 1.1);
    

    C. 在 Object Inspector 中将 TVirtualStringTree 的 toAutoChangeScale 设置为 false。

    全部放在一起,它给出:
    procedure TForm1.Edit3Change(Sender: TObject);
    var
      Delta: Double;
      i: byte;
    begin
      Delta := UpDown1.Position / VirtualStringTree1.Font.Size;
      VirtualStringTree1.BeginUpdate();
      try
      VirtualStringTree1.Font.Size        := UpDown1.Position;
      VirtualStringTree1.Header.Font.Size := UpDown1.Position;
      VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
      for i := 0 to VirtualStringTree1.Header.Columns.Count -1 do
        VirtualStringTree1.Header.Columns.Items[i].Width := Round(VirtualStringTree1.Header.Columns.Items[i].Width * Delta);
      finally
        VirtualStringTree1.EndUpdate();
      end;
    end;
    
    procedure TForm1.VirtualStringTree1MeasureTextHeight(Sender: TBaseVirtualTree;
      TargetCanvas: TCanvas; Node: PVirtualNode; Column: TColumnIndex;
      const Text: string; var Extent: Integer);
    begin
      Sender.NodeHeight[Node] := Round(Extent * 1.1);
    end;
    

    关于delphi - 放大 TVVirtualStringTree,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36245854/

    10-10 20:04