Hallo Community,
ich bin derzeit dabei, ein Programm zu schreiben, dass eine Datei visuell in Bytes darstellen soll.
Ich lese diese Datei wie folgt aus:
Delphi-Quellcode:
procedure TForm1.Date1Click(Sender: TObject);
var
fs: TFilestream;
buf : array of byte;
l : int64;
i,j:integer;
begin
with Opendialog1 do begin
if Execute then begin
fs := TFilestream.Create(FileName, fmOpenread or fmShareDenyNone);
try
l := fs.Size;
SetLength(Buf, l);
fs.Seek(0, soFromBeginning);
l := fs.Read(buf[0], l);
finally
fs.Free;
end;
end;
{.....}
end;
end;
Im Anschluss möchte ich nun den Buffer visuell darstellen.
Dazu verwende ich derzeit eine TStringGrid
Delphi-Quellcode:
procedure TForm1.Date1Click(Sender: TObject);
var
fs: TFilestream;
buf : array of byte;
l : int64;
i,j:integer;
begin
{.......}
//Form1.byteSG == TStringGrid;
last := -16; //last wird lediglich verwendet, um den Pointer im Buffer zu steuern
byteSG.RowCount := ceil((length(buf)-1) / 16)+1;
for I := 1 to byteSG.RowCount-1 do begin
last:=last+16;
byteSG.Cells[0,i] := inttohex(last,8); //linke Spalte der TStrinGrid
for j := 0 to 16 do begin
if(last+j <= length(buf)-1) then begin
byteSG.Cells[1+j,i] := inttohex(buf[i+j],2); //Bytewerte eintragen
end;
end;
application.ProcessMessages;
end;
end;
Mein Problem ist, dass diese Art der Umsetzung sehr langsam ist.
Bei einer Dateigröße von rund 7MB brauch der PC ca. 13 sec.
Wie kann ich die Darstellung beschleunigen?
Falls eine TStringGrid zur Darstellung ungeeignet/langsam ist, welches Objekt eigent sich besser?
Ich hoffe Ihr könnt mir da weiterhelfen.
Vielen Dank schon mal im Vorraus.
MfG Merovinger