![]() |
TGrid in FM mit Daten füllen
Hallo,
ich suche verzweifelt, wie ich in einem TGrid bei FM die Daten in das Gitter bekomme. In jedem TGrid müssen einzelne Column (Image,...) zugefügt werden. Jede TImageColumn verfügt über ein bis mehrere TImageCell. Ich finde nichts, wie ich an das TImageCell komme. Da nach Voreinstellung 100 Columm aufgebaut werden, müssen also 100 TImageCell's da sein. Aber wo? Und wie kann ich ein Bild zuweisen? Vielen Dank. Gruß Peter |
AW: TGrid in FM mit Daten füllen
Hallo,
Zitat:
Delphi-Quellcode:
weiter.
TGrid.OnGetValue
Ein einfaches Beispiel (TGrid und TImage auf das Form klatschen, dem TGrid eine TImageColumn spendieren - erste Spalte - und ins TImage eine beliebige Grafik laden):
Delphi-Quellcode:
Füllt Dir die Zeilen dann mit der der Grafik aus dem TImage
procedure TForm1.Grid1GetValue(Sender: TObject; const Col, Row: Integer; var Value: TValue);
begin if Col = 0 then Value := Image1.Bitmap end; Gruß |
AW: TGrid in FM mit Daten füllen
Hallo Volker,
danke für die Antwort. Das funktioniert. Zur Laufzeit eine Möglichkeit. OnSetValue gibt es auch. Wobei ich nicht verstanden habe, wann die beiden Ereignisse aufgerufen werden und wie ich das Programm gesteuert gestalten soll, wenn sich während der Laufzeit die Inhalte ändern. Gibt es denn keine Möglichkeit direkt auf TImageCell zuzugreifen? So in der Art ImageCell1.usw.? Wobei ich gerade sehe, dass TImageCell offensichtlich keine Create-Methode in Delphi hat, nur in C++. Was auch immer das bedeutet. Und ich finde keine Möglichkeit zur Entwicklungszeit, dem Objekt Bilder zuzuweisen. Überall ist das vorhanden, nur hier nicht? Ich denke, dass FM soweit ganz toll ist, aber bis man es verstanden hat dauert es. Gruß Peter |
AW: TGrid in FM mit Daten füllen
Hallo,
Zitat:
SetValue immer dann, wenn der Anwender den Zelleninhalt ändert. Zitat:
![]() Zitat:
Delphi-Quellcode:
eine Grafik in die entsprechende Zelle quetschen, macht aber nicht viel Sinn (wie oben schon erwähnt sind die Grafikdaten weg, sobald gescrollt wird o. ä.)
ImageColumn1.Children [i].Data := Image1.Bitmap
Zitat:
Vielleicht hilft' s Gruß |
AW: TGrid in FM mit Daten füllen
Hallo Volker,
so ein Beispiel habe ich gesucht, wie Du es gezeigt hast. Warum ich es nicht gefunden habe, weiß ich nicht. Jetzt wird einiges klarer (insbesondere mit Deinen Erläuterungen) und mit UpdateColumn kann es zur Laufzeit gesteuert werden. Weiß Du jetzt noch, wie ich FixedSpalten hinbekomme? Danke und viele Grüße Peter |
AW: TGrid in FM mit Daten füllen
Hallo,
Zitat:
Gruß |
AW: TGrid in FM mit Daten füllen
Sorry, da habe ich mich nicht präzise genug ausgedrückt.
Eine Spalte, die am linken Rand stehen bleibt, wenn das Gitter gescrollt wird. |
AW: TGrid in FM mit Daten füllen
Hallo,
Zitat:
Ich kenne Deine Problemstellung nicht; wenn es sich eher um eine Standarddarstellung (kein rotierendes Grid o. ä.) handelt, dann könntest Du die fixe Spalte(n) doch mit einem zweiten Grid erschlagen, das entsprechend über dem anderen Grid liegt. Dann muss Du nur noch das Selektieren bzw. Scrollen synchronisieren und die Höhe des "fixen" Grids anpassen, wenn der horizontale Scrollbalken ein bzw. ausgeblendet wird. Das ganze könntest Du so machen (nur mal kurz skizziert):
Delphi-Quellcode:
Sicherlich nicht der Weisheit letzter Schluss (soll auch nur grob den Weg skizzieren). Letztlich wäre da eine eigene Klasse zu bauen (ich habe mir aber die FMX Klassen noch nicht so genau angesehen).
unit Unit1;
interface uses System.SysUtils, System.Types, System.UITypes, System.Rtti, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls, FMX.Grid, FMX.Layouts, FMX.Header; type THeaderCell = class (FMX.Header.THeader) private procedure InternalResize (Sender : TObject); protected procedure SetData (const Value: TValue); override; public constructor Create (Owner : TComponent); override; end; THeaderColumn = class (FMX.Grid.TColumn) protected function CreateCellControl : TStyledControl; override; end; // Für den Zugriff auf die Scrollbars TGrid = class (FMX.Grid.TGrid) end; TForm1 = class(TForm) Grid1: TGrid; Column1: TColumn; ImageColumn1: TImageColumn; StringColumn1: TStringColumn; Grid2: TGrid; StyleBook1: TStyleBook; procedure FormCreate(Sender: TObject); procedure Grid1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); procedure Grid1SelChanged(Sender: TObject); procedure Grid2SelChanged(Sender: TObject); private { Private-Deklarationen } procedure SyncVScrollBarValue (Sender : TObject); public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.fmx} procedure THeaderCell.InternalResize (Sender : TObject); begin Items [0].Width := Width + 1 end; procedure THeaderCell.SetData (const Value : TValue); begin Items [0].Text := Value.AsString end; constructor THeaderCell.Create (Owner : TComponent); var i : THeaderItem; begin inherited Create (Owner); i := THeaderItem.Create (Self); i.Enabled := False; AddObject (i); OnResize := InternalResize end; function THeaderColumn.CreateCellControl : TStyledControl; begin Result := THeaderCell.Create (Self) end; procedure TForm1.FormCreate(Sender: TObject); begin Grid1.OnVScrollChange := SyncVScrollBarValue; Grid2.AddObject (THeaderColumn.Create (Self)); Grid2.Position.X := Grid1.Position.X; Grid2.Position.Y := Grid1.Position.Y; Column1.Enabled := False; Column1.Width := Grid2.Width - 5 end; procedure TForm1.Grid1Paint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF); begin if Grid1.HScrollBar.Visible then Grid2.Height := Grid1.Height - Grid1.HScrollBar.Height - 2 else Grid2.Height := Grid1.Height end; procedure TForm1.Grid1SelChanged(Sender: TObject); begin Grid2.Selected := Grid1.Selected end; procedure TForm1.Grid2SelChanged(Sender: TObject); begin Grid1.Selected := Grid2.Selected end; procedure TForm1.SyncVScrollBarValue(Sender: TObject); begin Grid2.VScrollBar.Value := Grid1.VScrollBar.Value end; end. Vielleicht hilft 's weiter oder ein Kollege hat 'ne bessere Idee. Gruß |
AW: TGrid in FM mit Daten füllen
Hallo Volker,
doch, doch, das hilft gewaltig weiter. Ganz besonders, was Du über das Synchronisieren der Scrollbalken geschrieben hast. Ich suche auch nach einer Möglichkeit die Scrollbalken insbesondere bei TListBox zu synchronisieren. Ich hoffe das klappt da auch. Das werde ich beides mal ausprobieren. Vielen Dank für Deine Mühe Gruß Peter |
AW: TGrid in FM mit Daten füllen
Hallo,
Zitat:
Zitat:
Delphi-Quellcode:
vor der Deklaration des Forms).
TListBox = class (FMX.ListBox.TListBox)end;
Ich habe nur noch nicht verstanden, warum man bei Emba wohl glaubt die Scrollbars unbedingt vor den Programmieren verstecken zu müssen (ich beiß da doch kein Stück aus den Dingern raus), oder ich habe einfach den tieferen Sinn dahinter noch nicht kapiert - aber vielleicht erhellt mich mal wer. Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:03 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 by Thomas Breitkreuz