
A mellékelt példaprogram megnyitása előtt a FlashConverter.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component – Install Component menüpontot. A mellékelt program futtatását megelőző lépésekről a cikk bevezetőjében olvashat.
Bevezető
A megoldáshoz a Macromedia Flash lejátszóját is fel kell használnunk. Ennek érdekében gondoskodnunk kell arról, hogy a lejátszó rendelkezésre álljon rendszerünkben. Amennyiben ezzel nem rendelkezünk, akkor letölthetjük azt a következő webhelyről:
http://zugdidi.iatp.org.ge/odishi/games/
A weblapon válasszuk a SAFlashPlayer.exe linket, és elérhető lesz a futtatható állomány. A link a cikk írásakor volt elérhető, mely természetesen meg is változhatott.
Konvertáló komponens
A TFlashConverter komponenst feltelepítve elérhetjük és a Form-ra dobva elérhetjük az Execute metódust, mely elvégzi a konvertálást. A metódus három bemenő paraméterrel rendelkezik.
- Az első paraméter a forrás Flash állomány elérési útvonalát tartalmazza (.SWF)
- A második paraméter a generálandó futtatható állomány elérési útvonalát tartalmazza
- A harmadik paraméter a SAFlashPlayer.exe lejátszó alkalmazás elérési útvonala lesz
Az Execute metódusban elsőként létrehozunk egy TFileStream objektumot a generálandó EXE számára.
dStream := TFileStream.Create(desc, fmCreate);
Majd létrehozunk egy ilyen objektumot a lejátszó adatfolyama számára.
lStream := TFileStream.Create(player, fmOpenRead or fmShareExclusive);
A következő lépés, hogy a cél adatfolyam bájtjait a most létrehozott lejátszó adatfolyamba másoljuk.
try
dStream.CopyFrom(lStream, 0);
finally
lStream.Free;
end;
Létrehozunk egy adatfolyam objektumot a forrás állomány számára is.
sStream := TFileStream.Create(source, fmOpenRead or fmShareExclusive);
A forrás adatfolyam bájtjait a cél adatfolyamba kell másolnunk.
dStream.CopyFrom(sStream, 0);
Végül az adatfolyam objektum tartalmát az új állományba írjuk.
flag := $FA123456;
dStream.WriteBuffer(flag, SizeOf(Integer));
SwfFileSize := sStream.Size;
dStream.WriteBuffer(SwfFileSize, SizeOf(Integer));
A mellékelt példában meg kell adnunk a SAFlashPlayer.exe alkalmazás elérési útvonalát, majd a generálást végző nyomógombra kell kattintanunk.
Amennyiben a megadott elérési útvonal létezik, akkor meghívjuk a komponens Execute metódusát.
if FileExists(edit1.Text) then begin FlashConverter1.Execute(ExtractFilePath(Application.ExeName)+ 'sample.swf',ExtractFilePath(Application.ExeName) + 'sample.exe',edit1.Text);
...
A művelet végén futtatjuk is a generált sample.exe állományt a CreateProcess metódussal.