Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Zugriff auf Zelle in TStringGrid (FMX) XE6 (https://www.delphipraxis.net/180120-zugriff-auf-zelle-tstringgrid-fmx-xe6.html)

eddie11 24. Apr 2014 12:00

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:
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;
Das funzt jetzt mit XE6 nicht mehr. Anscheinend gibt CellControlByRow nicht mehr die gewünschte Zelle zurück.
Hat jemend von Euch ein ähnliches Problem und evtl. schon eine Lösung gefunden?

Harry Stahl 24. Apr 2014 18:08

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:
function TColumn.CellControlByRow(Row: Integer): TStyledControl;
begin
  if (Grid <> nil) and Grid.IsSelected(Row) then
    Result := CellControl
  else
    Result := nil;
end;
Alte Version:
Delphi-Quellcode:
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;
Ich werde mal nach einem Ersatz suchen...

Ü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.

eddie11 25. Apr 2014 10:52

AW: Zugriff auf Zelle in TStringGrid (FMX) XE6
 
Zitat:

Ü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.
Das habe ich - zu meinem Leidwesen - auch schon festgestellt :-(. Ferner gibts auch DoSelChanged im Stringgrid nicht mehr, das hatte ich überschrieben.

Ich glaube ich werde mich auch mal mit TMS näher beschäftigen.

Harry Stahl 25. Apr 2014 17:44

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:20 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz