![]() |
XE7: Mobile App und TStringGrid
Moin,
ich bin anscheinend zu blöd, aber ich möchte einfach nur in einer Mobilen Anwendung ein StringGrid nutzen, aber weder über den Objektinspektor noch via Code kann ich die Anzahl der Spalten festlegen. Gibt es keine Spalten im Grid mehr??? Gruß HEiko |
AW: XE7: Mobile App und TStringGrid
Doch, diese sind aber untergeordnete Objekte. Du kannst weitere Spalten im Kontextmenü erzeugen oder Eine Instanz von TStringColumn im Code erzeugen und vom Grid adoptieren lassen.
|
AW: XE7: Mobile App und TStringGrid
Hallo,
Zitat:
Zitat:
Zitat:
Sorry, das ist mir zu hoch. Kannst Du mir das erklären? Gruß HEiko |
AW: XE7: Mobile App und TStringGrid
Das Grid als Parnt setzen
Delphi-Quellcode:
var
col: TStringColumn; .. col := TStringColumn.Create( StringGrid); col.Parent := StringGrid; col. ... |
AW: XE7: Mobile App und TStringGrid
Hallo,
Zitat:
Richtig? Da "col" aber laut Objektinspektor keine Rows kennt, wie spreche ich Spalte 2 Zeile 3 an? Gruß Heiko |
AW: XE7: Mobile App und TStringGrid
Im Allgemeinen geht man erst auf die Zeile (Datensatz) und da dann auf die Spalten/Werte
und in Col sind meistens nur die Definitionen der Spalten drin. Also ich würde da mal weiter suchen. PS: Wie wäre es, wenn du eine Datenquelle an dein Grid hängst/bindest und die Spalten-/Zeilenerstellung dem Grid überlässt? (DataSet, Liste oder Dergleichen) [edit] Oder es gibt Zelle, so wie beim VCL-Grid. Und ich dachte das FMX macht alles absichtlich anders. :stupid: |
AW: XE7: Mobile App und TStringGrid
Zitat:
Delphi-Quellcode:
StringGrid.Cells[1,2]
|
[Gelöst] XE7: Mobile App und TStringGrid
Hallo,
erstmal Danke für Deine Gedult. Zitat:
Delphi-Quellcode:
bleibt ohne Folgen. Das Grid bleibt leer.:cry:
StringGrid1.Cells[2,2]:=Edit2.Text;
Warum:?: Lösung: Die Text wird in die Zelle geschrieben, aber wird erst sichtbar nach einem
Delphi-Quellcode:
Gruß Heiko
StringGrid1.Repaint;
|
AW: XE7: Mobile App und TStringGrid
Hast du auch genügend Zeilen erstellt?
[edit] hmmmm. |
AW: XE7: Mobile App und TStringGrid
Hallo,
Zitat:
Gruß Heiko |
AW: XE7: Mobile App und TStringGrid
Zitat:
Delphi-Quellcode:
ganz hervorragend ... so wie erwartet.
StringGrid1.RowCount := 20;
StringGrid1.Cells[2,2] := 'Test'; |
AW: XE7: Mobile App und TStringGrid
Guten Abend Sir Rufo;
Zitat:
Aber, langsam gewöhne ich mich daran das bei mir egal in welcher Version auf welchem OS nichts so funktioniert wie es bei allen anderen funktioniert :cry: Gruß HEiko |
AW: XE7: Mobile App und TStringGrid
Hatte ich dann auch schon gesehn :mrgreen:
Ich will ja nicht sagen diese Komponente ist Schrott, aber ![]() Hab mal nachgesehn: * Im Gegensatz zum VCL-StringGrid erweitert das FMX-StringGrid die Zeilen von selber, wenn man auf Nichtexistierende zugreift. * Es wird nur der Text in
Delphi-Quellcode:
(TStringColumn) eingetragen, und kein Refresh ausgelöst ... das mußt du halt selber machen. (oder warten, bis das irgendwann von "alleine" passiert)
FCells: array of string;
|
AW: XE7: Mobile App und TStringGrid
Wenn ich den
Delphi-Quellcode:
nicht setze, dann habe ich das gleiche Verhalten, wie du es hier beschreibst.
RowCount
Ach ja, völlig korrekt (so wie man es machen sollte) ist das hier
Delphi-Quellcode:
Ok, klappt auch nur beim ersten Mal, weil sich der RowCount von 100 auf 20 ändert. Ein Eintragen von Werten löst einfach nicht den benötigten Refresh aus :)
StringGrid1.BeginUpdate;
try StringGrid1.RowCount := 20; StringGrid1.Cells[2, 2] := 'Test'; finally StringGrid1.EndUpdate; end; |
AW: XE7: Mobile App und TStringGrid
Ok, zur generellen Abhilfe hier ein netter Helper
Delphi-Quellcode:
Und so verwenden (geht jetzt bei jedem Control)
unit FMX.Helper.Controls;
interface uses FMX.Controls; type IControlUpdater = interface ['{D90FA99C-F9EC-4A55-9E99-95A54D1E30F8}'] end; TControlUpdater = class( TInterfacedObject, IControlUpdater ) private FControl: TControl; constructor Create( AControl: TControl ); public destructor Destroy; override; end; TControlHelper = class helper for TControl function BeginAutoUpdate: IControlUpdater; end; implementation uses System.SysUtils; { TControlUpdater } constructor TControlUpdater.Create( AControl: TControl ); begin inherited Create; FControl := AControl; // BeginUpdate FControl.BeginUpdate; end; destructor TControlUpdater.Destroy; begin // EndUpdate FControl.EndUpdate; // Refresh auf dem sichtbaren Bereich anmelden // das ist schonender als ein hartes Repaint FControl.InvalidateRect( FControl.ClipRect ); inherited; end; { TControlHelper } function TControlHelper.BeginAutoUpdate: IControlUpdater; begin Result := TControlUpdater.Create( Self ); end; end.
Delphi-Quellcode:
Sobald die Methode verlassen wird, wird auch das erzeugte Interface
uses
FMX.Helpers.Controls; procedure TSomeForm.SomeMethod; begin StringGrid1.BeginAutoUpdate; StringGrid1.Cells[2,2] := 'Test'; end;
Delphi-Quellcode:
wieder freigegeben (RefCount geht auf 0)
IControlUpdater
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 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