![]() |
Schrift aus Ressource nutzen
Ja eigentlich gibt es zu dem Thema schon 2-3 ähnliche Topics aber die beziehen sich eher darauf die Schrift zu extrahieren, registrieren und dann zu nutzen. Wie kann ich die Schrift direkt aus der Ressource nutzen ohne diese Umwege zu gehen?
|
Re: Schrift aus Ressource nutzen
Was spricht dagegen den herkömmlichen Weg zu nehmen? Warum muss es jetzt wieder eine Sonderlösung sein, die wahrscheinlich sogar wesentlich komplizierter zu implementieren ist?
|
Re: Schrift aus Ressource nutzen
Zitat:
Gruss Reinhard |
Re: Schrift aus Ressource nutzen
Es gibt in den WinAPIs auch eine, welche (angeblich) den Font aus der Resource läd, aber ich weiß jetzt nicht wie diese API heißt.
[add] Nach AddFontResource braucht ihr nicht suchen, das ist was ganz Anderes. Hier erstmal, wie man einen Font in die Resourcen reinmacht: ![]() |
Re: Schrift aus Ressource nutzen
Zitat:
Klar, in diesem Fall ist der 'herkömmliche' Weg sicherlich die Muster- bzw. die einfachste Lösung. Ich würde mal behaupten, dass sich die DP bzw. deren Nutzer nicht damit zufrieden geben sollte, auf Standardfragen auch immer nur Standardantworten zu geben, bzw. den 'herkömmlichen' weg aufzuzeigen; auch wenn ein anderer Weg 'wesentlich komplizierter zu implementieren ist'. Schaden kann es jedenfalls nicht - und wenn es nur Lernzwecken dient. Wer weiß, vielleicht kommt ja am Ende ganz was tolles daraus, und wir haben einen neuen 'TrueType-Renderer' :mrgreen: Wo wäre die Menschheit heute, wenn sie sich immer mit dem 'herkömmlichen' Weg zufrieden gegeben hätte? |
Re: Schrift aus Ressource nutzen
schau mal
![]() |
Re: Schrift aus Ressource nutzen
![]() ![]() Die so "installierten", bzw. geladenen Fonts sind nur innerhalb der entsprechenden Anwendung gültig. Infos zu den nötigen Font-Resourcen: ![]() Folgende Codes sind ungetested und nur Anhand der Quellen zusammengebastelt:
Delphi-Quellcode:
Da die Daten nicht direkt mit der Resource verknüpft sind, wären theoretisch sogar andere Quellen möglich,
Function LoadResFont(Const ResName: String; ResType: PChar = RT_FONT; InstalledFonts: PLongWord = nil): THandle; Overload;
Var Res: TResourceStream; Count: LongWord; Begin Res := TResourceStream.Create(HInstance, PChar(ResName), ResType); Try Result := AddFontMemResourceEx(Res.Memory, Res.Size, nil, @Count); If Assigned(InstalledFonts) Then InstalledFonts^ := Count; Finally Res.Free; End; End; Function LoadResFont(ResID: Integer; InstalledFonts: PLongWord = nil): THandle; Overload; Var Res: TResourceStream; Count: LongWord; Begin Res := TResourceStream.CreateFromID(HInstance, ResID, RT_FONT); Try Result := AddFontMemResourceEx(Res.Memory, Res.Size, nil, @Count); If Assigned(InstalledFonts) Then InstalledFonts^ := Count; Finally Res.Free; End; End; Function LoadResFont(FontStream: TStream; InstalledFonts: PLongWord = nil): THandle; Overload; Var Size: Integer; Mem: Pointer; Count: LongWord; Begin Size := FontStream.Size - FontStream.Position; Mem := GetMemory(Size); Try FontStream.ReadBuffer(Mem^, Size); Result := AddFontMemResourceEx(Mem, Size, nil, @Count); If Assigned(InstalledFonts) Then InstalledFonts^ := Count; Finally FreeMemory(Mem); End; End; Procedure UnloadResFont(Font: THandle); Begin RemoveFontMemResourceEx(Font); End; darum ist als Beispiel FontStream:TStream mit vorhanden. |
Re: Schrift aus Ressource nutzen
@Luckie: Bei dir ist die Erde auch noch ne eine Scheibe, weil dir das ganze Zeug mit der Kugel zu kompliziert ist was? Son Depp der Galileo, dass der da auch son komplizierten Weg gehen musste, war doch viel leichter mit der Scheibe ...
@Reinard: Coole Idee, aber ich glaub in Anbetracht meiner anfängerhaften Programmierkenntnisse wird daraus so schnell nichts ;) @Blackheart: Das entspricht eigentlich eher dem was ich nicht wollte (die Schriften erst zu extrahieren etc ...), aber darauf werd ich wohl zurückkommen menn himitsus Lösungsidee nicht funktioniert bzw. so überkompliziert wird wie Luckie profezeit @himitsu: Also ich arbeite mit Delphi 2010 und habe die Schriftart jetzt unter Projekt => Ressourcen hinzugefügt. Dabei wird dann auch gleich eine ID festgelegt. Bleiben noch folgende Fragen: 1. Was ist ein PLongWord und woher krieg ich diese Variable die die Installed Fonts angibt? 2. Was mach ich dann mit dem HFont, kann man das auch irgendwie in ein TFont umwandeln und damit dann Label1.Font belegen? |
Re: Schrift aus Ressource nutzen
Ein PLongWord ist ein Zeiger auf ein LongWord.
HFONT kannst du wie folgt behandeln: HFONT ist letztendlich auch nur ein Handle auf dein Font.
Delphi-Quellcode:
procedure NewFont;
var lFont : tFont; lCount : pLongWord; begin new(lCount); lFont := tFont.Create; lFont.Handle :=LoadResFont('MyFont',lCount); end; |
Re: Schrift aus Ressource nutzen
Und wozu ist das LongWord dann gut?
Also meine Ressourcen Datei sieht jetzt wie folgt aus: 1 Font "D:\\fonts\\Anywhere.ttf" und hab ich versucht mit beim FormCreate dem MyLabel die Schriftart aus der Ressource zuzuweisen:
Delphi-Quellcode:
Allerdings scheint er es dann einfach auf die im Formular als Standard eingestellte Schriftart zu setzen :(
procedure TForm1.OnCreate(Sender: TObject);
var lCount : pLongWord; begin new(lCount); MyLabel.Font.Handle := LoadResFont(1,lCount); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz