Heyho,
in einer meiner Anwendungen verwende ich die Schriftart 'Segoe UI Semibold', die unter Windows Vista & 7 ja vorinstalliert ist.
Um das gleiche Design auch unter XP zu haben (wo die Schriftart nicht installiert ist), möchte ich die Schriftart als Resource einbinden. Folgende Prozedur soll sie dann installieren:
Delphi-Quellcode:
{ Die rc-Datei: }
Segoe RT_FONT "seguisb.ttf"
{ aus der main-unit: }
type
TFontResBuffer =
record
Buffer: PChar;
Fraktur: THandle;
Size: Integer;
end;
{ ... }
var FontRes: TFontResBuffer;
{ ... }
procedure TProject.AddFontFromRes (
const ResName: PChar;
var Buffer: TFontResBuffer);
var
Res : TResourceStream;
ResFontCount: DWord;
begin
Res := TResourceStream.Create(hInstance, ResName, '
RT_FONT');
try
Buffer.Size := Res.Size + 1;
Buffer.Buffer := AllocMem(Buffer.Size);
Res.
Read(Buffer.Buffer^, Buffer.Size);
finally
Res.Free;
end;
ResFontCount := 1;
Buffer.Fraktur := AddFontMemResourceEx(Buffer.Buffer, Buffer.Size,
nil, @ResFontCount);
SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;
{ Aufruf: }
Project.AddFontFromRes(PChar('
Segoe'),FontRes);
Die Schriftart wird anscheinend vernünftig aus der Resource geladen, zumindest gibt AddFontMemResourceEx nen gültiges
Handle zurück. Das Problem: Unter XP passiert nach Aufruf dieser Prozedur trotzdem nichts, Labels, Buttons etc haben weiterhin Arial als Schriftart (nimmt er standardmäßig als Ersatz denke ich). Wenn ich auf meinem Windows 7 - Rechner die Prozedur ausführe und vorher die Schriftart vom System entferne, hat er für die ersten ~2 Sekunden die fette Variante aus der Segoe Familie und switcht dann zur richtigen, scheint also zu funktionieren.
Irgendjemand ne Idee was da falsch laufen könnte ?