Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi AddFontResource (https://www.delphipraxis.net/58122-addfontresource.html)

bioser 1. Dez 2005 16:56


AddFontResource
 
Hallo,

mein Programm hängt sich auf, wenn ich diesen Code verwende:

Delphi-Quellcode:
AddFontResource(PChar(ExtractFilePath(Application.ExeName)+'tituscbz.ttf'));
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
Die Schriftart befindet sich in dem Verzeichnis und ist nicht installiert.
Hat jemand schon mal ein ähnliches Problem gehabt ?

Gruss
bioser

Christian Seehase 1. Dez 2005 17:02

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.

bioser 1. Dez 2005 17:12

Re: AddFontResource
 
hi, ja, der Rückgabewert ist 1.

dataspider 1. Dez 2005 18:05

Re: AddFontResource
 
Hi,
ich kann nicht sagen, wo der Fehler liegt. Aber vielleicht geht ja mein Code:
Delphi-Quellcode:
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;
Gruß, Frank

bioser 2. Dez 2005 08:21

Re: AddFontResource
 
Danke für die Hilfe, aber es hat alles nichts gebracht.
Es liegt eindeutig an dieser Zeile:

Delphi-Quellcode:
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
Wenn ich diese auskommentiere, läuft das Programm normal durch.

Luckie 2. Dez 2005 08:23

Re: AddFontResource
 
Dann nimm Postmessage. Das kehrt sofort zurück und wartet nicht auf den Rückgabewert.

bioser 2. Dez 2005 09:00

Re: AddFontResource
 
Nun läuft mein Programm durch und die Schrift ist registriert
und auswählbar, aber sie wird nicht angezeigt.

Delphi-Quellcode:
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);
:wall:

bernau 2. Apr 2012 14:33

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:
SendMessage(hwnd_broadcast, wm_fontchange, 0, 0);
Auch wenn ich vorher keine Schrift mit AddFontRessource installiert habe, das Programm blieb an der Stelle hängen.

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 08:34 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz