亲爱的迪迪埃(我的同义词),
这是我所做的:
重要说明:这是我所做的,但我不确定这是最佳解决方案,因此任何新想法都非常受欢迎!
A. 在同一个事件处理程序中(例如Edit 的OnChange)。
设置Font.Size
TVirtualStringTree 的Header
:
VirtualStringTree1.Header.Font.Size := UpDown1.Position;
设置Font.Size
TVirtualStringTree 节点的:
VirtualStringTree1.Font.Size := UpDown1.Position;
设置Height
TVirtualStringTree 的Header
:
VirtualStringTree1.Header.Height := Round(VirtualStringTree1.Header.Height * Delta);
设置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);
B. 在 TVirtualStringTree 的OnMeasureTextHeight
事件处理程序上,设置它的NodeHeight[Node]
属性:
Sender.NodeHeight[Node] := Round(Extent * 1.1);
toAutoChangeScale
C.在 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;