// Dies ist ein simpler Hexviewer für nicht allzugroße Dateien.

// Getestet mit D4 unter Win98

procedure hexview(datei:String;re:TRichedit;OffsetAnzeige,AnsiZeichen:boolean);
const
Breite=16;
var
ms:TMemoryStream;
sl:TStringlist;
Buffer:array [0..Breite-1] of Char;
x,y:Integer;
hlp:string;
begin
if not
fileexists(datei) then begin
messagebox(application.handle,pchar('Datei "'+extractfilename(datei)+
'" nicht gefunden'),'FEHLER (HexView)',16);
exit;
end;
screen.cursor:=crHourglass;
ms:=TMemoryStream.create;
sl:=TStringlist.create;
try
re.clear;
ms.LoadFromFile(datei);
if ms.size > 0 then begin
re.font.name:='Courier New';
re.font.size:=9;
re.font.style:=[];
for x:=0 to ms.Size div Breite do
begin

ZeroMemory(@Buffer,Breite);
if OffsetAnzeige then hlp:=IntToHex(x * Breite, 8) + #32#32
else hlp:='';
for y:=0 to ms.Read(Buffer, Breite) - 1 do
begin

hlp:=hlp + IntToHex(Byte(Buffer[y]),2) + #32;
if Buffer[y] < #32 then
Buffer[y]:=#183;
end;
hlp:=hlp + StringOfChar(#32,Breite * 3 - Length(hlp) + ord(OffsetAnzeige) * 10 + 1);
if AnsiZeichen then hlp:=hlp + Buffer;
sl.Add(hlp);
end;
re.lines.beginupdate;
re.lines:=sl;
re.scrollbars:=ssVertical;
re.clientwidth:=(length(sl.strings[0]) + 1) * 7;
// bezogen auf obigen Font
re.lines.endupdate;
end;
finally

ms.Free;
sl.free;
screen.cursor:=crdefault;
end;
end;

procedure
TForm1.Button6Click(Sender: TObject);
begin
hexview('c:\test.txt',RichEdit1,true,true);
end;


Zugriffe seit 6.9.2001 auf Delphi-Ecke