Wir verschieben unsere Anwendung von XE6 nach 10.1 Berlin und wir haben eine benutzerdefinierte Raster-Stil funktioniert nicht. Als ich getestet habe, ging ich zurück zu XE6, um den Standard-Gitternetzstil & checkcellstyle zu betrachten, wenn eine TCheck-Spalte verwendet wurde und es funktioniert gut. Ich ging dann zu 10.1 Berlin und testete den Standard-Gridstyle und checkcellstyle, wenn ich eine TCheck columnum nutze und es funktioniert nicht. Das Kontrollkästchen wird nicht angezeigt, es sei denn, Sie klicken auf die Zeile im Raster .... und nachdem es angezeigt wird, können Sie es nicht aktivieren oder deaktivieren. Ist das ein Bug oder müssen wir noch etwas anderes in 10.1 Berlin machen?Grid's TCheckColumn funktioniert nicht in Delphi 10.1 Berliner firemonkey Anwendung
Antwort
Der Unterschied zwischen XE6 FMX.Grid und Delphi 10.1 Berlin FMX.Grid, speziell TCheckColumn, besteht darin, dass in XE6 die Kontrollkästchen auch dann sichtbar sind, wenn die verknüpfte TValue
Empty
ist. Dies war bis D10 Seattle der Fall. In D10.1 Berlin wurde dies so geändert, dass die Checkboxen nur dann sichtbar sind, wenn die verknüpfte TValue
entweder False
oder True
ist. Wenn TValue
Empty
ist, wird das Kontrollkästchen nicht angezeigt.
In D10.1 Berlin der folgende Test (ähnlich dem Dokument Beispiel) funktioniert für mich:
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;
zur Laufzeit sieht und es wie folgt aus:
Hier habe ich besuchte drei Zeilen und sie zeigen die Checkboxen.
Und zum Vergleich der XE6-Test;
Ja! Danke für die Erklärung – John
Was sind die genauen minimalen Schritte zu reproduzieren? Was ist der * benutzerdefinierte Raster-Stil *? Ist das Raster 'DefaultDrawing' aktiviert oder deaktiviert? –
Drop ein Raster auf dem Formular. Klicken Sie mit der rechten Maustaste, um Elemente hinzuzufügen. Fügen Sie eine TCheckColumn hinzu, und fügen Sie eine TStringColumn hinzu. Sie sollten die Kontrollkästchen sofort sehen, aber Sie nicht. Sie müssen zuerst auf eine Reihe klicken ... aber selbst dann können Sie das Kästchen nicht ankreuzen. Ich habe es sogar zur Laufzeit versucht und mit Daten in der Reihe. Diese Schritte funktionieren sowohl in XE6 als auch in XE7 einwandfrei. – John
Entschuldigung, der benutzerdefinierte Gridstyle ist standardmäßig "gridstyle". Wenn Sie den Standard-Stil auf dem Raster wählen, finden Sie ihn – John