Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   FMX TStringgrid und Dataset (https://www.delphipraxis.net/170042-fmx-tstringgrid-und-dataset.html)

ADelph 27. Aug 2012 16:58

FMX TStringgrid und Dataset
 
Hi,

ich kriege so langsam einen Hass auf FMX und StringGrids im Zusammenhang mit Datasets. Gut, ich probiere ja nur, denn ich möchte wissen, auf was ich mich einlasse, wenn ich auf XE2 etc. umstelle. Vieles scheint ansehnlicher zu sein. Aber einiges bringt mich schon jetzt auf die Palme.

Es war so schön einfach mit TDBGrid: Überschriften ausrichten war simpel, Spalten ausrichten war simpel, Zeilen Markieren oder farblich kennzeichnen war simpel, usw. usw.

Mit FMX kriege ich zur Zeit weder die Überschriften ausgerichtet, noch die Spalten überhaupt. Zeilen farblich zu markieren in Abhängigkeit eines Feldwertes kriege ich gar nicht hin. Und wenn ich auf die letzte Zeile eines StringGrids klicke, verschwindet die Selectmarkierung (aktuelle Zeile) und kommt auch nicht wieder, wenn ich darüberliegende Zeilen anklicke. Lediglich die horizontale Linie darüber wird blau statt grau. Wenn ich dann die erste Zeile anklicke, dann erscheint manchmal wieder der S-Balken (ich habe ShowSelectedCell auf false, damit ich das frühere dgRowSelect erhalte, weil ich die Werte der Datensätze nur anzeigen will). Klicke ich jedoch von Zeile zu Zeile immer in andere Zellen, dann wird immer der S-Balken angezeigt...

Im Internet finde ich eine ganze Reihe von Anregungen, aber bislang nicht im Zusammenhang mit Datasets - oder nur die ganz einfachen Sachen, z.B. wie ein DS an ein Grid angebunden wird.

Hat jemand Hinweise, Ideen, Anregungen? Ich würde ja gern auf FMX umstellen, aber so...

Grüße

mkinzler 27. Aug 2012 17:00

AW: FMX TStringgrid und Dataset
 
Besser auf XE3 warten, denn mit FM² werden ja Änderungen kommen

greenmile 29. Aug 2012 08:58

AW: FMX TStringgrid und Dataset
 
Die Grid/Stringlist Implementierung ist meiner Erfahrung nach die ver-bug-teste in FM, da hast Du Dir das Paradebeispiel rausgesucht. Mit den Sourcen ab Werk wirst Du es kaum stabil hinbekommen und ein Update wird es, denke ich, nicht mehr geben.

Ich würde auch auf XE3 warten, in XE2 hat das kaum Sinn. Ich habe auch einiges gekämpft, musste allerdings auch in den Sourcen rumpfuschen damit einiges läuft.

ADelph 29. Aug 2012 15:01

AW: FMX TStringgrid und Dataset
 
Hi,

ok, dann werde ich auch warten...konnte ja nicht wissen, dass ich ins größte Wespennest gestoßen bin... :wink: :?

Grüße

Uwe Raabe 29. Aug 2012 15:17

AW: FMX TStringgrid und Dataset
 
Ich habe mir diesen Helper gebaut, um die nötigsten Dinge hinzubekommen. Vielleicht hilft es dir ja etwas weiter. Die Implementation musst du noch an deine Bedürfnisse anpassen. Es war halt nur als Übergangslösung bis zu einem ausreichend funktionierenden Grid gedacht.


Delphi-Quellcode:
type
  TCustomGridHelper = class helper for TCustomGrid
  protected
    function FindHeader(AParent: TFmxObject): THeader;
  public
    procedure AdjustGrid;
    procedure AdjustStretchColumn(ACol: Integer);
    function GetHeader: THeader;
    property Header: THeader read GetHeader;
  end;


procedure TCustomGridHelper.AdjustGrid;
var
  edt: TEdit;
  headerItem: THeaderItem;
  I: Integer;
  J: Integer;
begin
  if Header <> nil then begin
    for I := 0 to Header.Count - 1 do begin
      headerItem := Header.Items[I];
      if headerItem <> nil then begin
        if I < 2 then
          headerItem.TextAlign := TTextAlign.taLeading
        else
          headerItem.TextAlign := TTextAlign.taTrailing;
        headerItem.Font.Size := 12;
      end;
    end;
  end;
  for I := 0 to ColumnCount - 1 do begin
    for J := 0 to RowCount - 1 do begin
      edt := (Columns[I].CellControlByRow(J) as TEdit);
      if edt <> nil then begin
        if I < 2 then
          edt.TextAlign := TTextAlign.taLeading
        else
          edt.TextAlign := TTextAlign.taTrailing;
        edt.Font.Size := 12;
      end;
    end;
  end;
end;

procedure TCustomGridHelper.AdjustStretchColumn(ACol: Integer);
var
  I: Integer;
  W: Single;
begin
  W := 5 + VScrollBar.Width;
  for I := 0 to ColumnCount - 1 do begin
    if I = ACol then Continue;
    if Columns[I].Visible then
      W := W + Columns[I].Width;
  end;
  Columns[ACol].Width := Width - W;
end;

function TCustomGridHelper.FindHeader(AParent: TFmxObject): THeader;
var
  I: Integer;
begin
  for I := 0 to AParent.ChildrenCount - 1 do begin
    if AParent.Children[I] is THeader then
      Exit(THeader(AParent.Children[I]));
  end;
  for I := 0 to AParent.ChildrenCount - 1 do begin
    result := FindHeader(AParent.Children[I]);
    if result <> nil then
      Exit(result);
  end;
  result := nil;
end;

function TCustomGridHelper.GetHeader: THeader;
begin
  Result := FindHeader(Self);
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:35 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