Einzelnen Beitrag anzeigen

creehawk

Registriert seit: 1. Jul 2013
Ort: Hamburg
233 Beiträge
 
Delphi 10.4 Sydney
 
#1

Win 10 : add/remove Font Resource

  Alt 2. Dez 2017, 16:20
Moin Moin.

Für ein Editierprogramm verwende ich eine besondere Schriftart. Diese wird beim Start aus einer Ressource gelesen, anschließend gesetzt und beim Beenden des Programms wieder entfernt.

Delphi-Quellcode:
//in Form.Create
....

   C4Font := 'D:\Games\C4\C4S.ttf';

    FontRes := TResourceStream.Create(hInstance, 'TTF', Pchar('CityFont'));
    FontRes.SaveToFile(C4Font);
    FontRes.Free;
    FontInt :=AddFontResource(PChar(C4Font));
    If FontInt > 0 then SendMessage(Application.Handle, WM_FONTCHANGE, 0, 0);
    If FontInt = 0 then
         MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Schriftenfehler', MB_OK or MB_ICONERROR);
....
// in Form.OnDestroy
....
    RemoveFontResource(PChar(CityFont));
    SendMessage(Application.Handle, WM_FONTCHANGE, 0, 0);
   If DeleteFile(C4Font) = false then   
         MessageBox(0, PChar(SysErrorMessage(GetLastError)), 'Löschfehler', MB_OK or MB_ICONERROR);
....
Soweit so schön, klappt(e) anstandslos. Also bisher, in diesem Fall mit Delphi7 und in Win7.

In Delphi 10.2 und Win10 geht das auch korrekt vor sich, dacht ich jedenfalls. Der Font wird zur Laufzeit verwendet,jedoch wird die TTF Datei nach dem Programmende nicht mehr gelöscht wie vorgesehen. Fehlermeldung : Zugriff verweigert

Eine Löschung im Explorer funktioniert ebenfalls nicht mit der bekannten "Aktion kann nicht beendet werden, weil die Datei im System geöffnet ist." Meldung. Zum Zeitpunkt des Löschaufrufs in Delphi/Explorer war keine Anwendung am laufen, schon gar nicht eine die diese Schrift verwendet.

Okay, einfach mal neu gestartet, direkt in den Explorer um die TTF Datei zu löschen - wieder "Aktion kann nicht....." usw. Jetzt mit "Unlocker" ans Werk. Und auch der kann die Datei erst - dann allerdings erfolgreich - nach einem Neustart löschen, gibt allerdings nicht aus wer denn die Datei im System noch verwendet. Jetzt mal kernig das Verzeichnis gelöscht in dem sich die TTF Datei befindet. Kein Problem. Alles weg.

Was kann das sein?

creehawk

Das Problem besteht auf insgesamt 20 Win10Home Rechnern, darunter auch nagelneue (Vanilla) ohne irgendwelche Programme.
  Mit Zitat antworten Zitat