Grid 的 TCheckColumn 在 Delphi 10.1 Berlin firemonkey 应用程序中不工作
Grid's TCheckColumn not working in Delphi 10.1 Berlin firemonkey application
我们正在将我们的应用程序从 XE6 迁移到 10.1 Berlin,但我们的自定义网格样式不起作用。当我测试时,我回到 XE6 查看默认的 gridstyle & checkcellstyle 在使用 TCheckcolumn 时它工作正常。然后我去了 10.1 Berlin 并在使用 TCheckcolumn 时测试了默认的 gridstyle 和 checkcellstyle,但它不起作用。即,除非您单击网格中的行,否则复选框不会显示……并且在它显示之后,您无法选中或取消选中它。这是一个错误还是我们需要在 10.1 Berlin 中做些什么?
XE6 FMX.Grid 和 Delphi 10.1 Berlin FMX.Grid 之间的区别,特别是 TCheckColumn,是在 XE6 中,即使链接 TValue
是,复选框也是可见的Empty
。直到 D10 西雅图之前都是这种情况。在 D10.1 Berlin 中,这发生了变化,只有当链接的 TValue
是 False
或 True
时,复选框才可见。如果 TValue
是 Empty
,则不会显示复选框。
在柏林 D10.1 中,以下测试(类似于文档示例)适用于我:
type
TForm27 = class(TForm)
Grid1: TGrid;
Column1: TColumn;
CheckColumn1: TCheckColumn;
StringColumn1: TStringColumn;
procedure Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
var Value: TValue);
procedure Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
const Value: TValue);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Arr: array of TValue;
public
{ Public declarations }
end;
implementation
procedure TForm27.FormCreate(Sender: TObject);
begin
SetLength(Arr, Grid1.RowCount);
end;
procedure TForm27.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
var Value: TValue);
begin
if ACol = 1 then
Value := Arr[ARow];
end;
procedure TForm27.Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
const Value: TValue);
begin
if ACol = 1 then
Arr[ARow] := Value.AsBoolean;
end;
在运行时它看起来像这样:
这里我访问了三行,它们显示了复选框。
与XE6测试对比;
我们正在将我们的应用程序从 XE6 迁移到 10.1 Berlin,但我们的自定义网格样式不起作用。当我测试时,我回到 XE6 查看默认的 gridstyle & checkcellstyle 在使用 TCheckcolumn 时它工作正常。然后我去了 10.1 Berlin 并在使用 TCheckcolumn 时测试了默认的 gridstyle 和 checkcellstyle,但它不起作用。即,除非您单击网格中的行,否则复选框不会显示……并且在它显示之后,您无法选中或取消选中它。这是一个错误还是我们需要在 10.1 Berlin 中做些什么?
XE6 FMX.Grid 和 Delphi 10.1 Berlin FMX.Grid 之间的区别,特别是 TCheckColumn,是在 XE6 中,即使链接 TValue
是,复选框也是可见的Empty
。直到 D10 西雅图之前都是这种情况。在 D10.1 Berlin 中,这发生了变化,只有当链接的 TValue
是 False
或 True
时,复选框才可见。如果 TValue
是 Empty
,则不会显示复选框。
在柏林 D10.1 中,以下测试(类似于文档示例)适用于我:
type
TForm27 = class(TForm)
Grid1: TGrid;
Column1: TColumn;
CheckColumn1: TCheckColumn;
StringColumn1: TStringColumn;
procedure Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
var Value: TValue);
procedure Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
const Value: TValue);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
Arr: array of TValue;
public
{ Public declarations }
end;
implementation
procedure TForm27.FormCreate(Sender: TObject);
begin
SetLength(Arr, Grid1.RowCount);
end;
procedure TForm27.Grid1GetValue(Sender: TObject; const ACol, ARow: Integer;
var Value: TValue);
begin
if ACol = 1 then
Value := Arr[ARow];
end;
procedure TForm27.Grid1SetValue(Sender: TObject; const ACol, ARow: Integer;
const Value: TValue);
begin
if ACol = 1 then
Arr[ARow] := Value.AsBoolean;
end;
在运行时它看起来像这样:
这里我访问了三行,它们显示了复选框。
与XE6测试对比;