Nichtregistrierte Schriftart benutzen

Twinsetter

Mitglied
Hallo!

Ich verwende in einem Programm eine TrueType Schriftart, die nicht immer standardmäßig in Windows vorhanden ist. Damit die Ausgaben des Programmes korrekt erfolgen binde ich die Schriftart durch das Programm temporär ein. Hierzu habe ich im OnCreate-Ereignis des Hauptformulars folgenden Code plaziert:
Code:
    AddFontResource(PChar(ExtractFilePath(ParamStr(0)) + 'matha___ttf'));
    SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
Obiger Code wurde einem Tip von http://swissdelphicenter.ch entnommen und hat bisher auch problemlos funktioniert. Bei einem Anwender des Programmes bleibt das Programm aber jetzt genau an dieser Stelle hängen und zwar bei der 2. Zeile. Er benutzt XP. Ich habe es daraufhin getestet. Unter Win98 keine Probleme, Win2k leichter Hänger an dieser Stelle es geht aber weiter. Bei XP gibt es Installationen wo's funktioniert bei anderen wiederum nicht. Bootet man den Rechner neu kann es sein, daß es dann wieder funktioniert. Die XP Installationen scheinen aber auf den ersten Blick identisch.

Könnte es sein, daß sich Botschaften bei XP grundlegend geändert haben? Kennt sich hier jemand aus? Konnte selbst bisher nichts passendes finden. Auch eine Lösung, die nur für XP gilt wäre mir recht, da das Programm vorher das OS abfragt und ich daher auch je nach OS anders verzweigen könnte.

Danke schon mal im voraus
 

CSANecromancer

Erfahrenes Mitglied
Ich weiß nicht, ob das tatsächlich damit zusammenhängt...
Ich habe hier in meinem Projekt unter XP schon diverse Probleme mit Fonts gehabt.
Da war zunächst einmal die Sache mit dem nicht korrekt funktionierenden Assign. Tatsächlich wurden zwischen zwei TFont-Objekten nicht die Werte ausgetauscht sondern die Handles. Zumindest sagte mir das der Debugger.

Dann hatte ich das Problem, daß ich dynamische Objektarray einlese, bei denen jedes Objekt ebenfalls mindestens ein TFont beinhaltet. Dabei ist mir aufgefallen, daß im Developer Studio anscheinend der TLogFont abgeschafft worden ist. Auf alle Fälle hatte ich große Mühe, Fonts zu importieren.

Und jetzt der Punkt, der evtl. auch für dich so richtig interessant werden könnte:

Beim Importieren der Fonts habe ich festgestellt, wenn ich einen LogFont (MS-Format) einfach importiere und dann einem TFont zuweise, dann rauscht mir das Programm böse ab.
Gehe ich im Einzelstepdebug durch - passiert gar nichts, alles klappt problemlos.
Lasse ich den LogFont automatisiert einlesen, weise ihn passend einem TFont zu und mache danach einen Sleep(1000) - dann funktioniert auch alles fehlerlos.

Ich kann mir sehr gut vorstellen, daß dein WM_FONTCHANGE eine ähnliche Aktion in Gang setzt. Der Font soll geändert werden, die Daten werden zwischen TFont-Objekten (und evtl. ein oder mehreren LogFonts) intern herumgeschoben, aber Delphi braucht aus unerfindlichen Gründen einfach etwas Zeit, um diese Datenüberweisung zu "verdauen".

Ist mal so ein Schuß in's Blaue, da ich auch nicht weiß, mit welchem Delphi du entwickelst, aber bei Fonts habe ich in Delphi schon sehr seltsame Sachen erlebt.