Delphi - DFM állomány megjelenítése szöveges formában

forráskód letöltése
Mellékelt példában bemutatjuk, hogy miként lehet egy bináris DFM állományt szövegessé konvertálni, úgy ahogyan azt a Delphi is megteszi, ha egy Form-on a jobb gombra előugró gyorsmenüből választott View as Text menüpontot válasszuk. Ehhez a konverzióhoz rendelkezésünkre áll egy ObjectResourceToText nevű eljárás, mely két stream-et vár paraméterként. Az egyik egy TFileStream kell hogy legyen. Ebben kell lennie a DFM állománynak. A másik stream egy TMemoryStream lesz. Itt kapjuk vissza a konvertált szöveget.

Az ObjectResourceToText hívása előtt a TFileStream-ben meg kell nyitnunk a kérdéses DFM állományt. Mivel a Delphi 5-ös verziójától kezdve már arra is lehetőség van, hogy a DFM állomány szöveges formátumban legyen eltárolva és nem bináris formában, így a konverzió előtt ellenőriznünk kell, hogy az adott DFM milyen formátumú. Ezt egyszerűen megtehetjük úgy, hogy beolvassuk az első bájtot az állományból. Ha ez $FF értékű, akkor a DFM bináris, különben szöveges formátumú.
procedure TForm1.Button1Click(Sender: TObject);
var
  fs: TFileStream;
  ms: TMemoryStream;
  b: byte;
begin
  OpenDialog1.InitialDir:=ExtractFilePath(Application.ExeName);
  if OpenDialog1.Execute then begin
    fs:=TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
    fs.Read(b, 1);
    fs.Position:=0;
    if b=$FF then begin
      ms:=TMemoryStream.Create;
      ObjectResourceToText(fs, ms);
      ms.Position:=0;
      ListBox1.Items.LoadFromStream(ms);
      ms.Free;
      Label1.Caption:='Type: Binary';
    end else begin
      ListBox1.Items.LoadFromStream(fs);
      Label1.Caption:='Type: Text';
    end;
    fs.Free;
  end;
end;