Hallo,
vielleicht ist dieser
Link etwas für Dich.
Der Link ist hilfreich!
Der springende Punkt ist, das OnChange Ereignis weiterzureichen und ein paar Feinheiten zu beachten. Ich habs wie folgt zum Laufen gebracht:
Diese Zeilen im FormCreate o.ä.:
Delphi-Quellcode:
for I := 0 to StringGrid1.ColumnCount-1 do begin
StringGrid1.ColumnByIndex(i).ApplyImmediately := false;
Verhindert das sofortige ändern des Grids wenn Eingaben erfolgen. Hat den Vorteil, dass das OnChange beim verlassen des Edits getriggert wird (wird gebraucht).
Auch noch in FormCreate eine Prozedur:
Delphi-Quellcode:
procedure TTestForm.UpdateStringGrid;
var
CellCtrl : TStyledControl;
Col,Row : Integer;
begin
for col := 0 to StringGrid1.ColumnCount-1 do begin
for row := 0 to StringGrid1.RowCount-1 do begin
CellCtrl := StringGrid1.ColumnByIndex(col).CellControlByRow(row);
if ( CellCtrl <> nil ) and ( CellCtrl is TTextCell ) then begin
TTextCell( CellCtrl ).OnApplyStyleLookup := GridCellApplyStyleLookup;
TTextCell( CellCtrl ).UpdateStyle;
TTextCell( CellCtrl ).OnChange := CellChange;
end;
end;
end;
end;
Damit kann man (auch zur Laufzeit) den Style der Zellen ändern. Hier ist aber wichtig das
OnChange zu fangen.
Delphi-Quellcode:
procedure TTestForm.CellChange(Sender : TObject);
begin
TColumn(TFMXObject(Sender).Parent).EndUpdate;
end;
Was genau bei EndUpdate von TColumn alles geschieht kann vielleicht jemand mit mehr Programmiererfahrung erzählen. Ich kann bloß sagen, dass auch Änderungen im Edit einer Zelle hiermit übernommen werden.
Kopieren, Ausschneiden, etc. wird damit auch übernommen.
Falls dieser Workaround Schwierigkeiten an anderer Stelle verursacht werde ich das hier erwähnen. Ansonsten gelöst.
Nachtrag:
Der Workaround
funktioniert doch
nicht. Keine Ahnung warum das einmal geklappt hat und jetzt nicht mehr...
Danke für euer Feedback!