DELPHI FONT i zasoby RC

0

Przeszukiwałem to forum i nie odnalazłem ani jednego funkcjonalnego przykładu umieszczenia czcionki *.TTF w zasobach RC pliku wykonywalnego naszej aplikacji.

Na podstawie danych z netu wygenerowałem poprawnie plik *.RES zawierający czcionkę ZX-Spectrum.TTF jednak
nie potrafię przypisać jej danych do kontrolek Form'y
Odnalazłem przykład jednak po kompilacji brak efektu...!!!!?

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
     // Nazwy zastosowane w pliu "fonty.res"  FONT_ZX_Spectrum RCDATA "Fonty\ZX-Spectrum.ttf"

     FONT_RES1_NAME = 'FONT_ZX_Spectrum';
     FONT_NR1_NAME = 'ZX-Spectrum.ttf';

var
  Form1: TForm1;

implementation

{$R *.dfm}

{$R Zasoby_RC\fonty.res}

procedure TForm1.FormCreate(Sender: TObject);
var
     Res : TResourceStream;
begin

     Res := TResourceStream.Create(hInstance, Pchar(FONT_RES1_NAME),RT_RCDATA );

     Res.SavetoFile(FONT_NR1_NAME);

     Res.Free;

     AddFontResource(PChar(FONT_NR1_NAME));

     SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);

     Font.Name:=FONT_NR1_NAME;

end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     RemoveFontResource(PChar(FONT_NR1_NAME));

     SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
end;

end.
0

Nosz ja j*bie; 15 sekund szukania i nawet kod w Delphi :|
http://stackoverflow.com/ques[...]can-i-temporarily-load-a-font

0

Raz próbowałem użyć własną czcionkę w IDE, ale nie dość, że pisałem na szybko jedynie z ciekawości to jeszcze jak nie wyszło - przestałem sprawdzać i w rzeczywistości niczego się nie nauczyłem;

Skoro nie chcesz zapisywać czcionki w pliku, tylko trzymać wszystko w pamięci, to czemu służą te instrukcje:

procedure TForm1.FormCreate(Sender: TObject);
var
  Res : TResourceStream;
begin
  Res := TResourceStream.Create(hInstance, Pchar(FONT_RES1_NAME),RT_RCDATA );
  Res.SavetoFile(FONT_NR1_NAME);
  Res.Free;

  {...}

jak nie zapisaniu zasobu na dysku? Następnie zabierasz się za rejestrowanie czcionki w systemie, a instrukcje które używasz do tego mogą wykorzystać jedynie plik zapisany na dysku, nie zasób:

  AddFontResource(PChar(FONT_NR1_NAME));
  SendMessage(HWND_BROADCAST,WM_FONTCHANGE,0,0);
  Font.Name:=FONT_NR1_NAME;
end;

Może jednak najpierw poczytaj różne artykuły na ten temat a później zabierz się za kilka testów?


Aby wykorzystać czcionkę z zasobu musisz trochę pokombinować - stronę na której wszystko jest wytłumaczone podał Ci @Patryk27 - jednak w tamtym przykładzie czcionka jest zasobem biblioteki, nie pliku wykonywalnego;

A wystarczyło zapytać Google...

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0