AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Cross-Platform-Entwicklung Delphi XE7: Mobile App und TStringGrid
Thema durchsuchen
Ansicht
Themen-Optionen

XE7: Mobile App und TStringGrid

Ein Thema von Kralle · begonnen am 17. Okt 2014 · letzter Beitrag vom 18. Okt 2014
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#11

AW: XE7: Mobile App und TStringGrid

  Alt 17. Okt 2014, 23:40
Hallo,

Hast du auch genügend Zeilen erstellt?
Ja. Lösung siehe oben.

Gruß Heiko
Also bei mir funktioniert
Delphi-Quellcode:
StringGrid1.RowCount := 20;
StringGrid1.Cells[2,2] := 'Test';
ganz hervorragend ... so wie erwartet.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Kralle

Registriert seit: 31. Okt 2004
Ort: Bremerhaven
355 Beiträge
 
Delphi XE7 Professional
 
#12

AW: XE7: Mobile App und TStringGrid

  Alt 17. Okt 2014, 23:44
Guten Abend Sir Rufo;

Also bei mir funktioniert
Delphi-Quellcode:
StringGrid1.RowCount := 20;
StringGrid1.Cells[2,2] := 'Test';
ganz hervorragend ... so wie erwartet.
Und bei mir wie erwartet nicht auf Anhieb und nur mit einem Refresh.
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

Gruß HEiko
OS: Windows 10 Professional, Delphi XE7 Pro SP1 +(Mobilpack & FireDAC)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#13

AW: XE7: Mobile App und TStringGrid

  Alt 17. Okt 2014, 23:48
Hatte ich dann auch schon gesehn

Ich will ja nicht sagen diese Komponente ist Schrott, aber
http://www.delphipraxis.net/181829-l...bjectlist.html


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 FCells: array of string; (TStringColumn) eingetragen, und kein Refresh ausgelöst ... das mußt du halt selber machen. (oder warten, bis das irgendwann von "alleine" passiert)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#14

AW: XE7: Mobile App und TStringGrid

  Alt 17. Okt 2014, 23:48
Wenn ich den RowCount nicht setze, dann habe ich das gleiche Verhalten, wie du es hier beschreibst.

Ach ja, völlig korrekt (so wie man es machen sollte) ist das hier
Delphi-Quellcode:
  StringGrid1.BeginUpdate;
  try
    StringGrid1.RowCount := 20;
    StringGrid1.Cells[2, 2] := 'Test';
  finally
    StringGrid1.EndUpdate;
  end;
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (17. Okt 2014 um 23:54 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#15

AW: XE7: Mobile App und TStringGrid

  Alt 18. Okt 2014, 00:16
Ok, zur generellen Abhilfe hier ein netter Helper
Delphi-Quellcode:
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.
Und so verwenden (geht jetzt bei jedem Control)
Delphi-Quellcode:
uses
  FMX.Helpers.Controls;

procedure TSomeForm.SomeMethod;
begin
  StringGrid1.BeginAutoUpdate;

  StringGrid1.Cells[2,2] := 'Test';
end;
Sobald die Methode verlassen wird, wird auch das erzeugte Interface IControlUpdater wieder freigegeben (RefCount geht auf 0)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (18. Okt 2014 um 08:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:38 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