Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Delphi XE7: Mobile App und TStringGrid (https://www.delphipraxis.net/182343-xe7-mobile-app-und-tstringgrid.html)

Sir Rufo 17. Okt 2014 22:40

AW: XE7: Mobile App und TStringGrid
 
Zitat:

Zitat von Kralle (Beitrag 1276481)
Hallo,

Zitat:

Zitat von himitsu (Beitrag 1276480)
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.

Kralle 17. Okt 2014 22:44

AW: XE7: Mobile App und TStringGrid
 
Guten Abend Sir Rufo;

Zitat:

Zitat von Sir Rufo (Beitrag 1276483)
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 :cry:

Gruß HEiko

himitsu 17. Okt 2014 22:48

AW: XE7: Mobile App und TStringGrid
 
Hatte ich dann auch schon gesehn :mrgreen:

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


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:
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)

Sir Rufo 17. Okt 2014 22:48

AW: XE7: Mobile App und TStringGrid
 
Wenn ich den
Delphi-Quellcode:
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 :)

Sir Rufo 17. Okt 2014 23:16

AW: XE7: Mobile App und TStringGrid
 
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
Delphi-Quellcode:
IControlUpdater
wieder freigegeben (RefCount geht auf 0)


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:59 Uhr.
Seite 2 von 2     12   

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