HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

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);


Cikksorozat

#IDKategóriaCikk címeSorozat
1063DelphiInterbase 6 alkalmazása Delphi-ben1. rész
1072DelphiInterbase 6 alkalmazása Delphi-ben2. rész
1084DelphiInterbase 6 alkalmazása Delphi-ben3. rész
1092DelphiTIBTable komponens4. rész
1102DelphiTIBTransaction komponens5. rész
1111DelphiTIBQuery komponens6. rész
1120DelphiTIBStoredProc komponens7. rész
1128DelphiTIBDataSet komponens8. rész
1141DelphiTIBSQL komponens9. rész
1150DelphiTIBSQLMonitor komponens10. rész
1159DelphiTIBUpdateSQL komponens11. rész
1167DelphiIBEvents komponens12. rész
1177DelphiIBDatabaseInfo komponens használata13. rész
1183DelphiTIBConfigService komponens14. rész
1192DelphiTIBSecurityService komponens15. rész
1204DelphiTIBServerProperties komponens16. rész
1213DelphiTIBBackupService komponens17. rész
1222DelphiTIBRestoreService komponens18. rész
1231DelphiTIBValidationService komponens19. rész
1240DelphiTIBStatisticalService komponens20. rész
1249DelphiTIBLogService komponens21. rész
1258DelphiTIBUninstall komponens22. rész
1267DelphiInterBase Express komponenscsomag23. rész


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!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |