|
A DFM fájl tartalmának beolvasása a Memo1 komponens Lines property-jébe történik. Ezt nem tehetjük meg közvetlenül a LoadFromFile eljárással, hiszen a DFM fájl lehet binárisan is tárolva. Éppen ezért a fájlt egy TFileStream típusú objektum segítségével nyitjuk meg. Beolvassuk az első bájtot, és ennek értékéből eldöntjük, hogy bináris vagy szöveges fájllal van-e dolgunk. Ha az első bájt értéke $FF akkor bináris, ellenkező esetben szöveges a fájl. Ha bináris, akkor az ObjectResourceToText eljárással olvassuk be.
A beolvasás után a GeneratePas eljárással előállítjuk a Form forráskódját. Ez nyilván csak az osztálydeklarációt fogja tartalmazni, hiszen az eljárások és függvények forráskódjának előállítása egy DFM fájlból lehetetlen, mivel ezekkel kapcsolatban semmilyen adatot nem tartalmaz.
Szerencsére a forráskód előállításánál nem kell foglalkoznunk a uses kulcsszó után a komponenseket tartalmazó unit-ok megadásával, ezt majd megteszi a Delphi, ha az elkészült forrást megnyitjuk, és újból elmentjük.
A Form nevét és az osztály típusát a DFM fájl első sorából tudjuk meg. Minden objektum deklarációja a DFM fájlban az object kulcsszó után áll. Egy ciklusban végigmegyünk az összes soron, és ha új komponenst találunk, akkor annak deklarációját beillesztjük a Form deklarációjának megfelelő sorába.
A mentéskor (Button2Click) a megadott fájlnév szerint módosítjuk a forráskód eső sorában a unit nevét, és az eredeti DFM fájlt is az új néven másoljuk a megadott helyre.
|