【问题标题】:zoom-in TVirtualStringTree放大电视虚拟字符串树
【发布时间】:2016-07-14 17:44:23
【问题描述】:

我想找到放大/缩小 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

【问题讨论】:

  • 这里离题了,但我可以问版主为什么我的问题被否决了。无论如何,它可以帮助提高我未来请求的兴趣。谢谢

标签: delphi zooming virtualtreeview tvirtualstringtree


【解决方案1】:

亲爱的迪迪埃(我的同义词),

这就是我所做的:
重要提示:这是我所做的,但我不确定这是最佳解决方案,因此欢迎任何新想法!

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

  1. 设置TVirtualStringTree HeaderFont.Size

    VirtualStringTree1.Header.Font.Size := UpDown1.Position;
    
  2. 设置TVirtualStringTree节点的Font.Size

    VirtualStringTree1.Font.Size := UpDown1.Position;
    
  3. 设置TVirtualStringTree HeaderHeight

    VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
    
  4. 设置TVirtualStringTreeHeader的列Width

    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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 2011-12-14
    • 2012-07-13
    • 1970-01-01
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多