![]() |
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 |
AW: FMX TStringgrid und Dataset
Besser auf XE3 warten, denn mit FM² werden ja Änderungen kommen
|
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. |
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 |
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 20: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