|
|
True Type Font tárolása EXE-ben és automatikus telepítése indításkor
|
|
Példaprogram letöltése
161737 bájt
|
Ha a készítendő programunk olyan True Type Font-ot használ, ami nem biztos, hogy megtalálható minden rendszeren, akkor valahogyan telepítenünk kell azt a program futtatása előtt. Az egyik legjobb módszer erre az, hogy a font-ot az EXE fájlban tároljuk, és a program indításakor ellenőrizzük, hogy az telepítve van-e már a rendszerbe. Ha nincs, akkor telepítjük mi magunk.
A mellékelt példaprogram megnyitása előtt a ResourceFont.pas-ban lévő komponenst telepítenie kell a Delphi alá.
A font ellenőrzéséhez és telepítéséhez létrehozunk egy új komponenst. Ennek feladata az lesz, hogy az Execute eljárás meghívásakor a paraméterként átadott nevű font-ot ellenőrzi, hogy már telepítve van-e, és ha nincs, akkor telepíti azt. A telepítendő font-okat erőforrásként fogja elérni.
Első lépésben létre kell hoznunk egy egyszerű .rc kiterjesztésű fájlt, aminek tartalma így néz ki:
RAGEIT RCDATA RAGEIT.TTF
TAGN RCDATA TAGN.TTF
Az első szó a font neve, amivel azonosíthatjuk a programon belül. Ez elvileg bármi lehet, de mindenképpen egyedinek kell lennie. A készítendő komponens az egyszerűség kedvéért a font nevét várja, a .TTF kiterjesztés nélkül, ahogy az a fenti példában is látszik. Az RCDATA kulcsszó azt mondja meg, hogy ez egy bináris adat. Ezután következik a fájlnév, ami a font fájl neve. A fenti példában két font-ot is elhelyezünk a fájlban.
Ha elkészült a fájl, akkor adjuk hozzá a project-ünkhöz. Ezután ha újrafordítjuk a project-et a két TTF font is bekerül az EXE fájlba.
A készítendő komponens mindössze egyetlen eljárást tartalmaz, ez pedig az Execute. Ennek egy paramétere van, a font neve, amit a .rc fájlban megadtunk. Az eljárásban a GetWindowsDirectory függvénnyel lekérdezzük a Windows könyvtárát a WinDir változóba. A FontDir változóban tároljuk el a Windows telepített font-jainak elérési útvonalát, ami a Windows könyvtár Fonts alkönyvtára.
GetWindowsDirectory(@WinDir, MAX_PATH);
FontDir:=WinDir+'\Fonts\';
Ellenőrizzük a FileExists függvénnyel, hogy a megadott nevű font létezik-e már. Ha nem létezik, akkor létrehozunk egy TResourceStream típusú objektumot, amin keresztül hozzáférhetünk az EXE fájlban tárolt erőforrásokhoz. A Create függvény paramétereként megadjuk a betűtípus nevét (a kiterjesztés nélkül), valamint az RT_RCDATA konstanst, ami azt mondja meg, hogy ez egy bináris adat lesz. A SaveToFile eljárással bemásoljuk a font-ot a Windows Fonts könyvtárába. Ezután a TResourceStream objektumra már nem lesz szükségünk, ezért megszüntetjük azt.
if not FileExists(FontDir+FontName+'.ttf') then begin
rs:=TResourceStream.Create(hInstance, FontName, RT_RCDATA);
rs.SaveToFile(FontDir+FontName+'.ttf');
rs.Free;
end;
A kimásolt font-okat az AddFontResource függvénnyel hozzáadjuk a rendszerhez. Ennek mindössze egy paramétere van: a font neve és elérési útvonala. A függvény visszatérési értéke 0, ha nem sikerült a művelet.
A SendMessage függvénnyel küldünk egy WM_FONTCHANGE üzenetet minden futó alkalmazásnak (HWND_BROADCAST), hogy tudassuk velük: új betűtípust telepítettünk.
AddFontResource(PChar(FontDir+FontName+'.ttf'));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 442. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|