我想找到放大/缩小 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)。
Font.Size
的 Header
:VirtualStringTree1.Header.Font.Size := UpDown1.Position;
Font.Size
:VirtualStringTree1.Font.Size := UpDown1.Position;
Height
的 Header
:VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
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/