Did*_*alé 4 delphi zooming virtualtreeview tvirtualstringtree
我想找到放大/缩小 TVirtualStringTree 的“最佳方式”。
“放大”是指模仿放大镜。
必须优先使用 TVirtualStringTree 控件中专门用于此的属性/方法来理解“最佳方式”。如果不存在任何方法,则提出最简单的方法,避免使用低级 API。
为了更好地解释这个问题,
以下是 TVirtualStringTree 初始状态的截图:
初始状态 http://didier.cabale.free.fr/temp/VST1.jpg。
.. 这里是 TVirtualStringTree 处于通缉状态的截图:
通缉状态 http://didier.cabale.free.fr/temp/VST2.jpg
亲爱的迪迪埃(我的同人),
这是我所做的:
重要说明:这就是我所做的,但我不确定这是最佳解决方案,因此任何新想法都非常受欢迎!!
A. 在同一个事件处理程序中(例如 Edit 的 OnChange)。
设置Font.Size
TVirtualStringTree 的Header
:
VirtualStringTree1.Header.Font.Size := UpDown1.Position;
Run Code Online (Sandbox Code Playgroud)设置Font.Size
TVirtualStringTree 节点的:
VirtualStringTree1.Font.Size := UpDown1.Position;
Run Code Online (Sandbox Code Playgroud)设置Height
TVirtualStringTree 的Header
:
VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
Run Code Online (Sandbox Code Playgroud)设置Width
TVirtualStringTree的列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);
Run Code Online (Sandbox Code Playgroud)B. 在 TVirtualStringTree 的OnMeasureTextHeight
事件处理程序上,设置其NodeHeight[Node]
属性:
Sender.NodeHeight[Node] := Round(Extent * 1.1);
Run Code Online (Sandbox Code Playgroud)
C.toAutoChangeScale
在 Object Inspector中将 TVirtualStringTree 设置为 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;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
404 次 |
最近记录: |