Jeg sad lige og så SuperBall og mente så at det ville være passende at overflade et eller andet tilfældigt spørgsmål fra eksperten i min indbakke.  Det her blev så offeret....
På dette link ligger koden til et lille demo program:
http://home1.inet.tele.dk/nip/temp/HexFileStream.zipKort fortalt, så går det ud på at jeg sub-classer, dvs laver/nedarver en ny class fra en anden eksisterende class, TFileStream.  Dette gør jeg ved at oprette følgende class:
type
  THexFileStream = class(TFileStream)
  public
    { Public declarations }
    Function ReadAsHexStr(Var Buf: String; Count : Longint): Longint;
    Function WriteAsHexStr(Buf : String): Longint;
  end;
Som det ses laver jeg to nye public metoder, der kan henholdsvis læse og skrive en streng, på hexformat, til og fra en FileStream - dvs. en hvilken som helst disk fil.
De to metoder er implementeret som:
function THexFileStream.ReadAsHexStr(var Buf: String; Count: Integer): Longint;
Var
  ByteArr : PByteArray;
  t       : LongInt;
begin
  Buf := '';
  GetMem(ByteArr, Count);
  Try
    Result := Read(ByteArr^, Count);    // TFileStream.Read()
    For t := 0 To Result-1 Do
       Buf := Buf + IntToHex(ByteArr[t], 2);
  Finally
    FreeMem(ByteArr);
  End
end;
function THexFileStream.WriteAsHexStr(Buf : String): Longint;
Var
  ByteArr : PByteArray;
  t       : LongInt;
begin
  t := 0;
  GetMem(ByteArr, (Length(Buf) Div 2)+1);
  Try
    While Length(Buf)>0 Do
      Begin
        ByteArr[t] := StrToInt('$' + Copy(Buf, 1, 2));
        Delete(Buf, 1, 2);
        Inc(t);
      End;
    Write(ByteArr^, t);                    // TFileStream.Write()
  Finally
    FreeMem(ByteArr);
  End;
end;
Bemærk, at jeg forventer at en hex-streng består ren hex-cifre og at jeg ikke gør noget specielt for at formatere hexstrengene.  Hermed mener jeg, at jeg ikke tager højde for, at strengene kan indeholde mellemrum, '$'-tegn eller '0x'-tegn.
Dvs:  en hexstreng, der skal symbolisere strengen 'ABC', skal altså indeholde '414243'.
Det er en smal sag, at fjerne alle uønskede tegn, fx. fjernes mellemrum med linien:
  While Pos(' ', Buf)<>0 Do Delete(Buf, Pos(' ', Buf), 1);
Zip-filen, der hentes via ovenstående link, indeholder source til en primitiv hex-editor, der, med en form indeholdede et memofelt og andre visuelle controls, viser hvoledes man kan bruge stream classen.
Med venlig hilsen
Peter
 - og nu går jeg i seng!