![]() |
AddFontResource
Hallo,
mein Programm hängt sich auf, wenn ich diesen Code verwende:
Delphi-Quellcode:
Die Schriftart befindet sich in dem Verzeichnis und ist nicht installiert.
AddFontResource(PChar(ExtractFilePath(Application.ExeName)+'tituscbz.ttf'));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); Hat jemand schon mal ein ähnliches Problem gehabt ? Gruss bioser |
Re: AddFontResource
Moin bioser,
hast Du mal den Rückgabewert von AddFontResource geprüft? Ich vermute mal, dass das Programm beim SendMessage hängenbleibt, weil irgendeine Anwendung die Message nicht verarbeitet, und SendMessage so nicht zurückkehrt. |
Re: AddFontResource
hi, ja, der Rückgabewert ist 1.
|
Re: AddFontResource
Hi,
ich kann nicht sagen, wo der Fehler liegt. Aber vielleicht geht ja mein Code:
Delphi-Quellcode:
Gruß, Frank
function RegisterFont(const Datei: String): string;
var FotName: String; bErg: Boolean; iErg: Integer; a, b: Array[0..128] of Char; begin Result:=''; if not FileExists(Datei) then Exit; FotName := ChangeFileExt(Datei, '.FOT'); StrPCopy(A, FotName); StrPCopy(B, Datei); if not fileExists(Fotname) then bErg := CreateScalableFontResource(0, a, b, '') else bErg:=true; if bErg then begin iErg := AddFontResource(A); if iErg > 0 then begin SendMessage(hwnd_broadcast, wm_fontchange, 0,0); Result := FotName; end; end; end; function UnRegisterFont(const Datei: string): Boolean; begin Result := RemoveFontResource(PChar(Datei)); SendMessage(hwnd_broadcast, wm_fontchange, 0, 0); end; |
Re: AddFontResource
Danke für die Hilfe, aber es hat alles nichts gebracht.
Es liegt eindeutig an dieser Zeile:
Delphi-Quellcode:
Wenn ich diese auskommentiere, läuft das Programm normal durch.
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
|
Re: AddFontResource
Dann nimm Postmessage. Das kehrt sofort zurück und wartet nicht auf den Rückgabewert.
|
Re: AddFontResource
Nun läuft mein Programm durch und die Schrift ist registriert
und auswählbar, aber sie wird nicht angezeigt.
Delphi-Quellcode:
:wall:
res := TResourceStream.Create(hInstance, 'My_FONT', Pchar('UnicodeFont'));
res.SaveToFile('tituscbz.ttf'); res.Free; AddFontResource(PChar('tituscbz.ttf')); PostMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0); |
AW: AddFontResource
Ist ein ziemlich alter Thread. Aber für mich war jetzt er aktuell und für andere vieleicht auch irgendwan mal. Deshalb hier meine Lösung:
Mein Programm soll eine Schrift temporär installieren und nutzen. Bei folgendem Code blieb das Programm hängen.
Delphi-Quellcode:
Auch wenn ich vorher keine Schrift mit AddFontRessource installiert habe, das Programm blieb an der Stelle hängen.
SendMessage(hwnd_broadcast, wm_fontchange, 0, 0);
Habe dann statt einer "broadcast" die Nachricht nur an mein Programm selber gesendet, dann ist es durchgegangen. Und die Schrift konnte auch genutzt werden.
Delphi-Quellcode:
SendMessage(application.handle, wm_fontchange, 0, 0);
P.S.: Der Fehler passierte nur auf einigen WinXP-Rechnern. Wie gesagt. Nur zur Info. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz