Jakiś czas temu, gdy pytałem się w jaki sposób wyświetlić w moim programie czcionkę, która raczej nie będzie zainstalowana w systemie użytkownika, otrzymałem porady w jaki sposób mu ja zainstalować.
No tak... Ale niezupełnie o to mi chodziło. Chcę użyć czcionki dostarczonej z moim programem i ładować ją jedynie na czas działania programu. Zbyt duża ilość fontów w systemie wcale nie pomaga, a program nie ma być instalatorem czcionek. Oto czego się doszukałem:
W naszym przypadku konieczne będzie użycie funkcji WinApi. Pierwszą więc rzeczą jaką musimy uczynić jest dopisanie do listy uses modułu: ShellApi.
Kopiujemy plik z naszym fontem, do katalogu z projektem aplikacji. Załóżmy, że plik nazywa się: Abc.TTF, a czcionka Alamakota.
Teraz możemy już załadować czcionkę. Zrobimy to przy pomocy funkcji AddFontResource(FileName:PChar). Jak widać, jej jedynym parametrem jest nazwa pliku czcionki. W naszym wypadku będzie to więc:
AddFontResource('Abc.TTF')
Od razu musimy też ogłosić pojawienie się nowego zasobu:
SendMessage (HWND_BROADCAST,WM_FONTCHANGE,0,0)
Moment w którym należy to zrobić, to na przykład FormCreate:
Od tego momentu – hulaj dusza, piekła nie ma! Możesz wpisywać sobie nazwę czcionki w obiekcie, w którym masz zamiar go użyć i będzie ona wyświetlana! Jeśli chcielibyśmy użyć jej w RichEdit możemy to zrobić tak:
Przy kończeniu pracy z aplikacją należałby po sobie posprzątać. W zdarzeniu OnClose formy użyjemy funkcji: RemoveFontResource(FileName:PChar), która usunie czcionkę z systemu. Należy również ponownie ogłosić komunikat : SendMessage (HWND_BROADCAST,WM_FONTCHANGE,0,0)