Seit ich dies mache, habe ich ein instabiles Anwendungsverhalten (wobei ich es nicht 100% auf die Font-Datei beziehen kann). Manchmal beendete sich die App nicht 100% und dann war die Font-Datei auch blockiert, manchmal dauerte es ewig, bis die App wirklich startete. Und die Hauptanpassung in der betroffenen Version war der eigene Font, den ich folgendermaßen eingebunden hatte:
Delphi-Quellcode:
unit ChangeDefaultFont;
interface
uses
System.SysUtils, System.Types, System.UITypes, System.Classes,
{$IFDEF MSWINDOWS}
WinAPI.Messages,
WinAPI.Windows,
{$ENDIF}
FMX.graphics;
type
TDefaultFont =
class (TInterfacedObject, IFMXSystemFontService)
public
function GetDefaultFontFamilyName:
string;
function GetDefaultFontSize: Single;
class procedure uninstallFont();
constructor create();
end;
implementation
constructor TDefaultFont.create();
{$IFDEF MSWINDOWS}
var wStr:WideString;
pWStr:PWideChar;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
wStr:=ExtractFilePath(ParamStr(0))+'
Font.ttf';
pwstr:=PWideChar(wStr);
AddFontResource(pwstr);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
freemem(pWStr);
{$ENDIF}
end;
class procedure TDefaultFont.uninstallFont();
{$IFDEF MSWINDOWS}
var wStr:WideString;
pWStr:PWideChar;
{$ENDIF}
begin
{$IFDEF MSWINDOWS}
wStr:=ExtractFilePath(ParamStr(0))+'
Font.ttf';
pwstr:=PWideChar(wStr);
RemoveFontResource(pwstr);
SendMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0) ;
freemem(pWStr);
{$ENDIF}
end;
function TDefaultFont.GetDefaultFontFamilyName:
string;
begin
Result := '
Inter';
end;
function TDefaultFont.GetDefaultFontSize: Single;
begin
Result := 13.0;
end;
initialization
TFont.FontService := TDefaultFont.Create;
end.
Vielleicht reicht es ja auch aus, dies einmalig zu laden und auf das uninstallFont zu verzichten. Für den Installer habe ich jetzt den Font per Innosetup reingenommen und für die msix-Version scheint es eine genehmigungspflichtige Anpassung der AppxManifest.template.xml-Datei zu sein:
Code:
xmlns:uap4="http://schemas.microsoft.com/appx/manifest/uap/windows10/4"
...
<Extensions>
<uap4:Extension Category="windows.sharedFonts">
<uap4:SharedFonts>
<uap4:Font File="Inter.ttf"/>
</uap4:SharedFonts>
</uap4:Extension>
</Extensions>
Zumindest habe ich den Code für das dynamische Laden und Entladen entfernt um zu sehen, ob dies das Problem auslöst.
Grüße, Philipp