自动调整列大小 Header
AutoSize Columns Header
我有一个链接到 FDMemTable 的字符串网格,当我第一次 运行 AutoSize 过程(我添加到它的 class 帮助器中)时,一切都很完美。
之后,当我尝试重新打开 FDMemTable 时,我的 Header 恢复到默认大小,但其他行保持不变。
我的程序如下:
procedure TStringGridHelper.AutoSizeCols;
var
i, W, WMax: integer;
Column : Integer;
begin
for Column := 0 to Self.ColumnCount-1 do
begin
if Self.ColumnByIndex(Column).Width > 0 then
begin
WMax := Round(Canvas.TextWidth(Self.ColumnByIndex(Column).Header));
for i := 0 to (Self.RowCount - 1) do begin
W := Round(Canvas.TextWidth(Self.Cells[Column, i]));
if W > WMax then
WMax := W;
if WMax > SizeMax then
begin
WMax := SizeMax;
Break;
end;
end;
Self.ColumnByIndex(Column).Width := WMax + 10;
end;
end;
end;
如果我手动调整列的大小,它会恢复正常。
我正在使用 XE7 及其 Multi-Device 应用程序 (FireMonkey)
这看起来像 Delphi XE7 更新 1 错误。
在 Delphi XE8 上,您的代码运行良好。
在 Delphi XE7 Update1 上,它看起来很奇怪。
通过更改 FDMemTable 的(任何字段)它恢复正常。
我刚刚调用了我的订购程序。
我有一个链接到 FDMemTable 的字符串网格,当我第一次 运行 AutoSize 过程(我添加到它的 class 帮助器中)时,一切都很完美。
之后,当我尝试重新打开 FDMemTable 时,我的 Header 恢复到默认大小,但其他行保持不变。
我的程序如下:
procedure TStringGridHelper.AutoSizeCols;
var
i, W, WMax: integer;
Column : Integer;
begin
for Column := 0 to Self.ColumnCount-1 do
begin
if Self.ColumnByIndex(Column).Width > 0 then
begin
WMax := Round(Canvas.TextWidth(Self.ColumnByIndex(Column).Header));
for i := 0 to (Self.RowCount - 1) do begin
W := Round(Canvas.TextWidth(Self.Cells[Column, i]));
if W > WMax then
WMax := W;
if WMax > SizeMax then
begin
WMax := SizeMax;
Break;
end;
end;
Self.ColumnByIndex(Column).Width := WMax + 10;
end;
end;
end;
如果我手动调整列的大小,它会恢复正常。
我正在使用 XE7 及其 Multi-Device 应用程序 (FireMonkey)
这看起来像 Delphi XE7 更新 1 错误。
在 Delphi XE8 上,您的代码运行良好。
在 Delphi XE7 Update1 上,它看起来很奇怪。
通过更改 FDMemTable 的(任何字段)它恢复正常。
我刚刚调用了我的订购程序。