gpt4 book ai didi

delphi - 放大 TVVirtualStringTree

转载 作者:行者123 更新时间:2023-12-03 15:28:24 30 4
gpt4 key购买 nike

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

最佳答案

亲爱的迪迪尔(我的 self ),

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

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.在对象检查器中将 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com