Font Datei.ttf
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Font Datei.ttf
Hallo,
gibt es für Windows Programierte Programme eine Möglichkeit
*.ttf Schriftdateien in einem Lazarus Programm einzubinden?
Gruß
gibt es für Windows Programierte Programme eine Möglichkeit
*.ttf Schriftdateien in einem Lazarus Programm einzubinden?
Gruß
- af0815
- Lazarusforum e. V.
- Beiträge: 6217
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Font Datei.ttf
Mit der Forumssuche unter "font einbinden" finde ich mal das:
https://lazarusforum.de/viewtopic.php?f ... +einbinden
und weiteres. Ist damit deine Frage beantwortet ?
https://lazarusforum.de/viewtopic.php?f ... +einbinden
und weiteres. Ist damit deine Frage beantwortet ?
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Nein,
das habe ich schon gelesen und nicht verstanden.
Das bezieht sich alles auf Linux.
Kann man eine nicht installierte Schrift in ein LZ Programm (wie z.B. ein .po Datei) einbinden?
das habe ich schon gelesen und nicht verstanden.
Das bezieht sich alles auf Linux.
Kann man eine nicht installierte Schrift in ein LZ Programm (wie z.B. ein .po Datei) einbinden?
- af0815
- Lazarusforum e. V.
- Beiträge: 6217
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Font Datei.ttf
Erster Post - der Link bezieht sich auf Windows Only Lösungen.
Zitat:
Dort wird auch auf https://stackoverflow.com/questions/298 ... -in-delphi verwiesen.My question is this: How can one do the same without using AddFontMemResourceEx, since it's Windows only, under a Linux OS?
Ich verwende einen Installer um die Dateien korrekt zu installieren, dazu gehören auch Schriftarten, Vorlagen etc. Mit Fonts ist es so wie mit Bildern, man muss verdammt auf die Copyrigths aufpassen. Nur einfach einen Font einbetten ist nicht so, nur so nebenbei.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Vielen Danke, gesehen,
aber sehr kompliziert.
aber sehr kompliziert.
Re: Font Datei.ttf
Warum muss der Font in die Exe eingebunden werden? Wenn das ein spezieller Font ist, der benötigt wird, liefere ihn zusammen mit deiner Anwendung aus, schreibe einen Installer, z.B. mit InnoSetup, und installiere ihn zusammen mit der Anwendung regulär in Windows, ggfs mit den nötigen Rechten. Dann muss sich dein Programm nicht mehr darum kümmern.
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Ist halt ein Programm welches ab XP von einem Stick läuft, welches keinerlei Spuren auf dem Rechner hinterlässt, es soll auch nichts installiert werden.
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
AddFontMemResourceEx() kommt auch nicht in Frage, weil es erst ab Win2000 laufen soll, ich weis aber auch nicht in welcher Unit sich es befinden soll.
- af0815
- Lazarusforum e. V.
- Beiträge: 6217
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: Font Datei.ttf
Sorry, aber wenn du auf Plattformen arbeiten willst, die vor Win7 sind, so wird es eng. Dann solltest du keine Kunststücke mehr betreiben wie eigene Fonts etc.
Wenn aber geforderrt, dann solltest du mal suchen was es vor AddFontMemResourceEx gegeben hat.
Hier siehst du ev. wie man Windows sagt wo ein Font liegt https://www.delphipraxis.net/409574-post.html#483417 . Dann kannst du den Font auch am USB-Stick haben, nur Windows sagen, das dort ein Font ist mittels AddFontResourceA laden soll.
Info: https://docs.microsoft.com/en-us/window ... tresourcea
Das müsste alles in der Unit windows sein.
Wenn ich dannach suche finde ich es hier:
Wenn aber geforderrt, dann solltest du mal suchen was es vor AddFontMemResourceEx gegeben hat.
Hier siehst du ev. wie man Windows sagt wo ein Font liegt https://www.delphipraxis.net/409574-post.html#483417 . Dann kannst du den Font auch am USB-Stick haben, nur Windows sagen, das dort ein Font ist mittels AddFontResourceA laden soll.
Info: https://docs.microsoft.com/en-us/window ... tresourcea
Das müsste alles in der Unit windows sein.
Wenn ich dannach suche finde ich es hier:
Wenn du eine Lösung suchst, so wirst du dir aus den Infos was zusammenstellen müssen. Fertig ist da nichts.C:\Data\lazdev\fpcsrc\packages\winunits-jedi\src\jwawingdi.pas 386 KB PAS-Datei 17.11.2021 13:16:00 17.11.2021 13:16:00 22.05.2022 09:04:11 54
4534 function AddFontResourceA(lpszFileName: LPCSTR): Integer; stdcall;
4535 {$EXTERNALSYM AddFontResourceA}
4536 function AddFontResourceW(lpszFileName: LPCWSTR): Integer; stdcall;
4537 {$EXTERNALSYM AddFontResourceW}
4538 function AddFontResource(lpszFileName: LPCTSTR): Integer; stdcall;
4539 {$EXTERNALSYM AddFontResource}
5087 function AddFontResourceExA(lpszFilename: LPCSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
5088 {$EXTERNALSYM AddFontResourceExA}
5089 function AddFontResourceExW(lpszFilename: LPCWSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
5090 {$EXTERNALSYM AddFontResourceExW}
5091 function AddFontResourceEx(lpszFilename: LPCTSTR; fl: DWORD; pdv: PVOID): Integer; stdcall;
5092 {$EXTERNALSYM AddFontResourceEx}
7870 _AddFontResourceA: Pointer;
7872 function AddFontResourceA;
7874 GetProcedureAddress(_AddFontResourceA, gdi32, 'AddFontResourceA');
7878 JMP [_AddFontResourceA]
7883 _AddFontResourceW: Pointer;
7885 function AddFontResourceW;
7887 GetProcedureAddress(_AddFontResourceW, gdi32, 'AddFontResourceW');
7891 JMP [_AddFontResourceW]
7896 _AddFontResource: Pointer;
7898 function AddFontResource;
7900 GetProcedureAddress(_AddFontResource, gdi32, 'AddFontResource' + AWSuffix);
7904 JMP [_AddFontResource]
10054 _AddFontResourceExA: Pointer;
10056 function AddFontResourceExA;
10058 GetProcedureAddress(_AddFontResourceExA, gdi32, 'AddFontResourceExA');
10062 JMP [_AddFontResourceExA]
10067 _AddFontResourceExW: Pointer;
10069 function AddFontResourceExW;
10071 GetProcedureAddress(_AddFontResourceExW, gdi32, 'AddFontResourceExW');
10075 JMP [_AddFontResourceExW]
10080 _AddFontResourceEx: Pointer;
10082 function AddFontResourceEx;
10084 GetProcedureAddress(_AddFontResourceEx, gdi32, 'AddFontResourceEx' + AWSuffix);
10088 JMP [_AddFontResourceEx]
13214 function AddFontResourceA; external gdi32 name 'AddFontResourceA';
13215 function AddFontResourceW; external gdi32 name 'AddFontResourceW';
13216 function AddFontResource; external gdi32 name 'AddFontResource' + AWSuffix;
13382 function AddFontResourceExA; external gdi32 name 'AddFontResourceExA';
13383 function AddFontResourceExW; external gdi32 name 'AddFontResourceExW';
13384 function AddFontResourceEx; external gdi32 name 'AddFontResourceEx' + AWSuffix;
C:\Data\lazdev\fpcsrc\rtl\win\wininc\ascdef.inc 62 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 22.06.2022 14:23:35 2
297 function AddFontResource(_para1:LPCSTR):longint; external 'gdi32' name 'AddFontResourceA';
C:\Data\lazdev\fpcsrc\rtl\win\wininc\ascfun.inc 64 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 22.06.2022 14:23:35 2
300 function AddFontResourceA(_para1:LPCSTR):longint; external 'gdi32' name 'AddFontResourceA';
C:\Data\lazdev\fpcsrc\rtl\win\wininc\unidef.inc 62 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 17.11.2021 13:16:01 2
298 function AddFontResource(_para1:LPCWSTR):longint; external 'gdi32' name 'AddFontResourceW';
C:\Data\lazdev\fpcsrc\rtl\win\wininc\unifun.inc 65 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 22.06.2022 14:23:35 2
297 function AddFontResourceW(_para1:LPCWSTR):longint; external 'gdi32' name 'AddFontResourceW';
C:\Data\lazdev\fpcsrc\rtl\win16\winprocsh.inc 66 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 17.11.2021 13:16:01 1
602 function AddFontResource(lpszFilename: LPCSTR): SmallInt; external 'GDI';
C:\Data\lazdev\fpcsrc\rtl\wince\wininc\coredll.inc 202 KB INC-Datei 17.11.2021 13:16:01 17.11.2021 13:16:01 17.11.2021 13:16:01 4
1874 function AddFontResource(_para1:LPCWSTR):longint; external KernelDLL name 'AddFontResourceW';
1875 function AddFontResourceW(_para1:LPCWSTR):longint; external KernelDLL name 'AddFontResourceW';
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Super, Danke.
Wenn es Funktioniert hilft mir das schon weiter.
Ich habe aber noch einige Fragen, wäre dankbar für eine Antwort.
Da ich nur ein Fontdatei benötige,
muss ich wie in Beispiel "post.html#483417" unbedingt eine Ressourcen Datei haben?
Kann man die Datei nicht direkt mit Pfadangabe einfügen?
Wenn eine Res-Datei angegeben werden muß, Fontdatei mit Pfad?
Warum sollen die Fonts beim Programm Ende wieder entfernt werden?
Wenn das Programm beendet wird steht der Font doch sowieso nicht mehr z. Verfügung,
weil das Programm ja beendet wurde, kann man das sich nicht ersparen?
Wenn es Funktioniert hilft mir das schon weiter.
Ich habe aber noch einige Fragen, wäre dankbar für eine Antwort.
Da ich nur ein Fontdatei benötige,
muss ich wie in Beispiel "post.html#483417" unbedingt eine Ressourcen Datei haben?
Kann man die Datei nicht direkt mit Pfadangabe einfügen?
Wenn eine Res-Datei angegeben werden muß, Fontdatei mit Pfad?
Warum sollen die Fonts beim Programm Ende wieder entfernt werden?
Wenn das Programm beendet wird steht der Font doch sowieso nicht mehr z. Verfügung,
weil das Programm ja beendet wurde, kann man das sich nicht ersparen?
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Nachtrag,
wo bitte ist der Name der ".rc" Deklariert?
Die ".rc" Datei muß doch einen Namen haben?
Dateiname im Projektverzeichnis "?.rc"
Z.B. Inhalt der Datei
ResFont1 RF1 "verdanaz.ttf"
......
wo bitte ist der Name der ".rc" Deklariert?
Die ".rc" Datei muß doch einen Namen haben?
Code: Alles auswählen
Res := TResourceStream.Create(hInstance, 'ResFont' + IntToStr(f), PChar('RF' + IntToStr(f)));
Res.SaveToFile('TmpFont' + IntToStr(f)' + .ttf');
FreeAndNil(Res);
AddFontResource(PChar('TmpFont' + IntToStr(f) + '.ttf'));
Z.B. Inhalt der Datei
ResFont1 RF1 "verdanaz.ttf"
......
-
- Beiträge: 834
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Font Datei.ttf
Wenn die API dir nur das zur Verfügung stellt, dann musst du das eben so hinnehmen.
Wenn du nur AddFontResource verwendest, dann solltest du hinter dir aufräumen, da - wie die Dokumentation erwähnt - die Schriftart für alle verfügbar ist - und bleibt. Wenn du AddFontResourceEx mit FR_PRIVATE oder AddFontMemResourceEx nutzt, dann musst du nicht hinter dir aufräumen, da Windows das dann für dich macht.
Der Dateiname der rc-Datei muss mit dem übereinstimmen, was in der {$R ...}-Direktive angegeben ist, mit der die Ressource in das Programm eingebunden wird.hbr hat geschrieben: ↑Di 23. Aug 2022, 09:20Nachtrag,
wo bitte ist der Name der ".rc" Deklariert?
Die ".rc" Datei muß doch einen Namen haben?
Dateiname im Projektverzeichnis "?.rc"Code: Alles auswählen
Res := TResourceStream.Create(hInstance, 'ResFont' + IntToStr(f), PChar('RF' + IntToStr(f))); Res.SaveToFile('TmpFont' + IntToStr(f)' + .ttf'); FreeAndNil(Res); AddFontResource(PChar('TmpFont' + IntToStr(f) + '.ttf'));
Z.B. Inhalt der Datei
ResFont1 RF1 "verdanaz.ttf"
......
FPC Compiler Entwickler
-
- Beiträge: 285
- Registriert: Mi 20. Feb 2013, 10:30
- OS, Lazarus, FPC: Win (L 2.2.4 FPC 3.2.2)
- CPU-Target: 32/64,ARM(RPi)
Re: Font Datei.ttf
Hallo,
brauche noch einmal Hilfe.
Also in meiner .lpr steht {$R *.res} also alle .res im Projektverzeichnis werden berücksichtigt.
Gebe ich nun in meiner main z.B. {$R font.res} ein, heist es doppelte vergabe.
Aber mein "Font" wird nicht gefunden.
Es heißt immer Resourge "Font" not found.
Was könnte es sein ?
Res := TResourceStream.Create(hInstance, 'Font' , PChar('RF'));
Resource datei heißt font.res.
Font RF "12640.ttf"
Error. Error while compiling resource -> Compile with -vd for more details. Check for duplicates
Msg=Error while compiling resources -> Compile with -vd for more details. Check for duplicates.
MsgID=9029
FPC Msg=exec_e_error_while_compiling_resources=9029
brauche noch einmal Hilfe.
Also in meiner .lpr steht {$R *.res} also alle .res im Projektverzeichnis werden berücksichtigt.
Gebe ich nun in meiner main z.B. {$R font.res} ein, heist es doppelte vergabe.
Aber mein "Font" wird nicht gefunden.
Es heißt immer Resourge "Font" not found.
Was könnte es sein ?
Res := TResourceStream.Create(hInstance, 'Font' , PChar('RF'));
Resource datei heißt font.res.
Font RF "12640.ttf"
Error. Error while compiling resource -> Compile with -vd for more details. Check for duplicates
Msg=Error while compiling resources -> Compile with -vd for more details. Check for duplicates.
MsgID=9029
FPC Msg=exec_e_error_while_compiling_resources=9029
- fliegermichl
- Lazarusforum e. V.
- Beiträge: 1436
- Registriert: Do 9. Jun 2011, 09:42
- OS, Lazarus, FPC: Lazarus Fixes FPC Stable
- CPU-Target: 32/64Bit
- Wohnort: Echzell
Re: Font Datei.ttf
Nein {$R *.res} steht in jeder Unit welche Formulare definiert und bindet nur unitname.res ein.
Alle anderen Resourcen müssen entweder mit {$R dateiname.res} zur Compilezeit eingebunden werden.
Du hast aber auch die Möglichkeit unter Projekt -> Projekteinstellungen -> Resourcen eigene Resourcen in die exe einzulinken. Diese können dann zur Laufzeit mit LoadResource geladen werden.
Alle anderen Resourcen müssen entweder mit {$R dateiname.res} zur Compilezeit eingebunden werden.
Du hast aber auch die Möglichkeit unter Projekt -> Projekteinstellungen -> Resourcen eigene Resourcen in die exe einzulinken. Diese können dann zur Laufzeit mit LoadResource geladen werden.
-
- Beiträge: 834
- Registriert: Mi 3. Jun 2020, 07:18
- OS, Lazarus, FPC: L 2.0.8, FPC Trunk, OS Win/Linux
- CPU-Target: Aarch64 bis Z80 ;)
- Wohnort: München
Re: Font Datei.ttf
Nein, der Asterisk heißt hier, dass der Name der aktuellen Datei ergänzt wird.
Hast du noch irgendwo anders ein $R font.res? Heißt deine Unit oder dein Programm vielleicht font?
Nimm doch mal einen anderen Namen als das ach so generische „Font”. Es kann sein, dass durch eine der LCL Units vielleicht auch schon eine „Font” Ressource reinkommt. Wobei du ja auch einen benutzerdefinierten Typ („RF”) angegeben hast, also sollte das eigentlich nicht das Problem sein, was heißt, dass doch irgendwas von dir doppelt reinkommt. Hast du das Font RF "12640.ttf" wirklich in der font.res stehen? Wenn ja, sollte das in eine font.rc und du gibst dann {$R font.rc} an.
FPC Compiler Entwickler