Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit AddFontResource (https://www.delphipraxis.net/171089-problem-mit-addfontresource.html)

G-Baumstamm 19. Okt 2012 13:31

Delphi-Version: 5

Problem mit AddFontResource
 
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 ?

Bernhard Geyer 19. Okt 2012 13:35

AW: Problem mit AddFontResource
 
Zitat:

Zitat von G-Baumstamm (Beitrag 1187610)
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.

Hast du auch von Microsoft die Erlaubnis geholt das zu machen? AFAIK erteil MS keine Erlaubnis diese Schriftarten mit der eigenen Anwendung zu verteilen!

G-Baumstamm 19. Okt 2012 19:49

AW: Problem mit AddFontResource
 
Das wusste ich nicht, danke für den Hinweis. Werde ich mir wohl ne freie Schriftart suchen und die verwenden ... Denke allerdings nicht das damit das beschriebene Problem gelöst ist, jemand da noch ne Ahnung ?

Bummi 19. Okt 2012 21:28

AW: Problem mit AddFontResource
 
Verwendest Du den Font dann auch irgendwo ....

http://www.delphipraxis.net/170969-%...ml#post1186852

G-Baumstamm 21. Okt 2012 17:18

AW: Problem mit AddFontResource
 
Danke sehr, funktioniert einwandfrei !


Alle Zeitangaben in WEZ +1. Es ist jetzt 01: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