Einzelnen Beitrag anzeigen

G-Baumstamm

Registriert seit: 9. Jan 2010
63 Beiträge
 
Delphi 7 Enterprise
 
#1

Problem mit AddFontResource

  Alt 19. Okt 2012, 14:31
Delphi-Version: 5
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 ?
Daniel NR
  Mit Zitat antworten Zitat