SizeOf sospetto che restituisca sempre 4 ... o 8 se hai un'architettura a 64 bit ...
Per le stringhe c'è un'altra strada da usare ... o fai un loop tu che scriva ogni singolo carattere o ti affidi al metodo degli stream per la scrittura delle stringhe. In altternativa puoi modificare il codice esistente +o - così:
lung:=sizeof(edit1.text);
f.Write(edit1.text,lung);
....
lung:=sizeof(bmp);
f.Write(bmp,lung);
diventerebbe
lung:=length(edit1.text);
f.Write(lung,sizeOf(integer);
f.Write(edit1.text[1],lung);
...
bmp.savetoStream(f);
codice non testato, ma scritto a memoria.