Delphi > Firemonkey

Použití StringGrid ve Firemonkey

(1/1)

PetrB0:
Ahoj,
snažím se vytvořit svou první "multiplatform" aplikaci přes FireMonkey. Když jsem měl jedno okno s tlačítky, tak mi to fungovalo. Teď chci přidat form s TStringGridem a neumím ho nijak naplnit. Vždy mi to na EndUpdate hází naprosto nesmyslná exceptions. (c00000005 ACCESS_VIOLATION) Dochází k tomu v TControl.SetHitTest u vyvolání HitTestChanged (unit FMX.Controls)
mám tento kód, který by mi měl vytvořit jednoduchou tabulku z řetězce hexa kódů. V podstatě prohlížeč, vlevo 16 hexa čísel, vpravo jejich ASCII podoba.


--- Kód: Delphi ---unit UHexView; interface uses  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, System.Rtti, FMX.Grid.Style, FMX.Grid, FMX.StdCtrls, FMX.Controls.Presentation, FMX.ScrollBox; type  THexView = class(TForm)    gridHex: TStringGrid;    Panel1: TPanel;    Panel2: TPanel;    StringColumn1: TStringColumn;    StringColumn2: TStringColumn;    StringColumn3: TStringColumn;    StringColumn4: TStringColumn;    StringColumn5: TStringColumn;    StringColumn6: TStringColumn;    StringColumn7: TStringColumn;    StringColumn8: TStringColumn;    StringColumn9: TStringColumn;    StringColumn10: TStringColumn;    StringColumn11: TStringColumn;    StringColumn12: TStringColumn;    StringColumn13: TStringColumn;    StringColumn14: TStringColumn;    StringColumn15: TStringColumn;    StringColumn16: TStringColumn;    StringColumn17: TStringColumn;    StringColumn18: TStringColumn;    StringColumn19: TStringColumn;    StringColumn20: TStringColumn;    StringColumn21: TStringColumn;    StringColumn22: TStringColumn;    StringColumn23: TStringColumn;    StringColumn24: TStringColumn;    StringColumn25: TStringColumn;    StringColumn26: TStringColumn;    StringColumn27: TStringColumn;    StringColumn28: TStringColumn;    StringColumn29: TStringColumn;    StringColumn30: TStringColumn;    StringColumn31: TStringColumn;    StringColumn32: TStringColumn;    StringColumn33: TStringColumn;    StringColumn34: TStringColumn;    procedure FormClose(Sender: TObject; var Action: TCloseAction);  private    { Private declarations }    pObsah : String;     Procedure PisObsah(Const Vst : String);  public    { Public declarations }    property Obsah : String Read  pObsah                            Write PisObsah;  end; var  HexView: THexView; implementation{$R *.fmx} procedure THexView.FormClose(Sender: TObject; var Action: TCloseAction);begin// Action:=caFree;end; procedure THexView.PisObsah(const Vst: String);Var   __Sl      : TStringList;   __I       : Integer;   __Radek   : Integer;   __Sloupec : Integer;begin pObsah:=Vst; __Sl:=TStringList.Create; gridHex.BeginUpdate; try  __Sl.StrictDelimiter:=True;  __Sl.Delimiter:=' ';  __Sl.DelimitedText:=Vst;  gridHex.ClearContent;  __I:=(__Sl.Count div 8);  if (__Sl.Count mod 8)<>0 then   Inc(__I);  gridHex.RowCount:=1+__I;   for __I := 0 to gridHex.ColumnCount-1 do   case __I of     0     : gridHex.Columns[__I].Header:='';     1..10 : gridHex.Columns[__I].Header:=IntToStr(__I-1);    11..16 : gridHex.Columns[__I].Header:=Chr(__I-11+65);        17 : gridHex.Columns[__I].Header:='';    18..27 : gridHex.Columns[__I].Header:=IntToStr(__I-18);    28..33 : gridHex.Columns[__I].Header:=Chr(__I-28+65);   end;   for __I := 1 to gridHex.RowCount-1 do   gridHex.Cells[0,__I]:=Format('%x',[__I*16]);    __Radek:=1;   __Sloupec:=1;  for __I := 0 to __Sl.Count-1 do   begin    gridHex.Cells[__Sloupec,__Radek]:=__Sl[__I];    gridHex.Cells[__Sloupec+17,__Radek]:=__Sl[__I]; //Zatim    if __Sloupec=16 then     begin      __Sloupec:=1;      Inc(__Radek);     end                    Else     Inc(__Sloupec);   end; finally  gridHex.EndUpdate;  __Sl.Free; end;end; end.  
vyvolávám to takto:

--- Kód: Delphi ---Var   __HW : THexView;begin __HW:=THexView.Create(Self); try   __HW.Obsah:='FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF';   __HW.Show; finally//  __HW.Release; end;end;  
Když jsem tam ještě neměl begin a end update, tak mi to padalo už na nastavování počtu řádků nebo hlavičce druhého sloupce.
Můžete mi poradit, co mám špatně?

Díky

Pb

edit: používám Embarcadero® RAD Studio 10.4 Version 27.0.38860.1461 , update na 10.41

Radek Červinka:
Hod sem cely program vcetne fmx

PetrB0:
Tady to je.

Díky

Pb

Radek Červinka:
gridHex.ckClearContent ti vymaze sloupce.

PetrB0:
Díky, taková blbost. Zjevně ztraceno v překladu ;-)

Pb

P.S. ale zvláštní bylo, že při krokování mi to dávalo správný počet sloupců...

Navigace

[0] Seznam témat

Přejít na plnou verzi