![]() |
Zugriff auf Zelle in TStringGrid (FMX) XE6
Hi allerseits,
bis einschließlich XE5 konnte ich mit CellControlByRow auf eine einzelne Zelle einer TStringColumn zugreifen. Das habe ich getan, um z.B. die Textfarbe einer Zelle zu ändern.
Delphi-Quellcode:
Das funzt jetzt mit XE6 nicht mehr. Anscheinend gibt CellControlByRow nicht mehr die gewünschte Zelle zurück.
type
TColumnAccess = class( TColumn ) end; procedure TForm1.Button2Click(Sender: TObject); var Col, Row: Integer; CellCtrl: TStyledControl; begin for Col := 0 to StringGrid1.ColumnCount - 1 do begin for Row := 0 to StringGrid1.RowCount - 1 do begin CellCtrl := TColumnAccess( StringGrid1.Columns[ Col ] ).CellControlByRow( Row ); if ( CellCtrl <> nil ) and ( CellCtrl is TTextCell ) then begin TTextCell( CellCtrl ).StyledSettings := []; TTextCell( CellCtrl ).FontColor := claBlueViolet; TTextCell( CellCtrl ).Font.Family := 'Times New Roman'; TTextCell( CellCtrl ).Font.Style := [ TFontStyle.fsBold ]; TTextCell( CellCtrl ).Font.Size := 14; end; end; end; end; Hat jemend von Euch ein ähnliches Problem und evtl. schon eine Lösung gefunden? |
AW: Zugriff auf Zelle in TStringGrid (FMX) XE6
Die Funktion hat sich (leider) geändert, ist quasi totgelegt, weil ein Wert nur zurückgeliefert wird, wenn die Zelle in der selektierten Zeile liegt:
Delphi-Quellcode:
Alte Version:
function TColumn.CellControlByRow(Row: Integer): TStyledControl;
begin if (Grid <> nil) and Grid.IsSelected(Row) then Result := CellControl else Result := nil; end;
Delphi-Quellcode:
Ich werde mal nach einem Ersatz suchen...
function TColumn.CellControlByRow(Row: Integer): TStyledControl;
var i: Integer; LGrid : TCustomGrid; begin LGrid := Grid; Result := nil; if not Assigned(LGrid) then Exit; for i := 0 to High(FCellControls) do if (FCellControls[i].Visible) and (Trunc(StringToPoint(FCellControls[i].TagString).Y) = Row) then begin Result := FCellControls[i]; Exit; end; end; Übrigens ist das nicht die einzige Änderung an den Grids. Bei StringGrids sind mir nichts dir nichts die Onpaint und Onpainting-Events für die TStringColumns weggefallen. Ich hatte mich glaube ich zu Recht dafür entschieden, mit dem TMS-Grid zu arbeiten, solche Brüche habe ich dort Gott sei Dank noch nicht erlebt. |
AW: Zugriff auf Zelle in TStringGrid (FMX) XE6
Zitat:
Ich glaube ich werde mich auch mal mit TMS näher beschäftigen. |
AW: Zugriff auf Zelle in TStringGrid (FMX) XE6
Ja, Verwendung des TMS-Grids ist wohl derzeit fast alternativlos.
Denn wenn Du neben anderen Komponenten (TEdits, TListbox, usw) auch ein Grid oder StringGrid mit einer StringColumn darin auf die Form legst, bewirkt dies, dass die TabStop-Funktion völlig außer Kraft gesetzt wird. Also per Druck auf die Tabtaste kannst Du Dich dann gar nicht mehr in der Form von Control zu Control bewegen. Leider ein weiterer fieser Punkt auf der Liste der Peinlichkeiten. Ich hab das inzwischen bei meiner Quality-Central-Meldung ergänzt. M.E. muss der Punkt unbedingt in das nächste Bug-Fix rein, dass m.E. schon nächste Woche kommen müsste, denn die bisherig festgestellten Fehler (u.a. fehlendes oder fehlerhaftes Autosize bei TLabel) sind wirklich weder schön noch akzeptabel. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz