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.