2010-06-06 14 views
14

Pracuję nad aplikacją, która wymaga czcionki o prawdziwym typie kodu kreskowego, która jest mało prawdopodobna na komputerze użytkownika.Osadzanie czcionki w delphi

Czy mogę w jakiś sposób osadzić czcionkę w aplikacji lub czy muszę użyć instalatora, aby zainstalować czcionkę?

+5

można zrobić jedno i drugie. Mam 1 pytanie, to jest twoja czcionka? lub, czy możesz redystrybuować? –

+1

Możesz go osadzić jako zasób. Zobacz także http://stackoverflow.com/questions/2305344/how-to-use-external-fonts –

Odpowiedz

7

Tak, można zapisać go jako zasób w pliku EXE, a na komputerze użytkownika można wyodrębnić go jako plik przy użyciu instancji TResourceStream. Następnie możesz zadzwonić pod funkcję AddFontResource API. Na koniec należy wysłać wiadomość WM_FONTCHANGE do wszystkich okien najwyższego poziomu w systemie (sekcja "Sprawdź uwagę" w opisie AddFontResource w witrynie MSDN).

Jeśli potrzebujesz przykładowego kodu, daj mi znać.

+2

Pamiętaj, że możesz złamać niektóre prawa autorskie lub ograniczenia licencyjne, jeśli nie masz praw do redystrybucji dla tej czcionki. –

10

Moim zdaniem najprostszym sposobem jest użycie AddFontMemResourceEx w przypadku, gdy czcionka jest osadzona jako zasób w EXE. Umożliwia ładowanie czcionki bezpośrednio z pamięci, bez konieczności zapisywania czcionki do pliku.

Kod Przykład:

function LoadResourceFont(const ResourceName, FontName : string) : boolean; 
var 
    ResStream : tResourceStream; 
    FontsCount : integer; 
    hFont : tHandle; 
begin 
    ResStream := tResourceStream.Create(hInstance, ResourceName, RT_RCDATA); 
    hFont := AddFontMemResourceEx(ResStream.Memory, ResStream.Size, nil, @FontsCount); 
    result := (hFont <> 0); 
    ResStream.Free(); 
end;