AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schrift aus Ressource nutzen

Ein Thema von Shubit · begonnen am 15. Feb 2010 · letzter Beitrag vom 16. Feb 2010
Antwort Antwort
Seite 1 von 2  1 2      
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#1

Schrift aus Ressource nutzen

  Alt 15. Feb 2010, 22:09
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?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Schrift aus Ressource nutzen

  Alt 15. Feb 2010, 22:16
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?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#3

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 02:02
Zitat von Shubit:
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?
ganz einfach: du schreibst deinen eigenen TrueType-Renderer. Den von Windows kannst du ja nicht benutzen.

Gruss Reinhard
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#4

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 07:27
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:
http://msdn.microsoft.com/en-us/library/aa381043.aspx
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
s-off

Registriert seit: 20. Jan 2010
89 Beiträge
 
Delphi 2010 Professional
 
#5

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 07:35
Zitat von Luckie:
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?
Was spricht dagegen, auch mal über den Tellerrand hinauszuschauen, und auch mal zu versuchen, Alternativlösungen zu finden?
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'

Wo wäre die Menschheit heute, wenn sie sich immer mit dem 'herkömmlichen' Weg zufrieden gegeben hätte?
Gruß
s-off
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#6

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 08:54
schau mal hier vieleicht hilft das ja.
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.034 Beiträge
 
Delphi 12 Athens
 
#7

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 09:26
MSDN-Library durchsuchenAddFontMemResourceEx und MSDN-Library durchsuchenRemoveFontMemResourceEx und diese liegen schon mindestens seit Delphi 7 in der Windows-Unit rum.

Die so "installierten", bzw. geladenen Fonts sind nur innerhalb der entsprechenden Anwendung gültig.

Infos zu den nötigen Font-Resourcen:
http://msdn.microsoft.com/en-us/library/aa381043.aspx

Folgende Codes sind ungetested und nur Anhand der Quellen zusammengebastelt:
Delphi-Quellcode:
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;
Da die Daten nicht direkt mit der Resource verknüpft sind, wären theoretisch sogar andere Quellen möglich,
darum ist als Beispiel FontStream:TStream mit vorhanden.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#8

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 20:56
@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?
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#9

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 21:01
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;
Lars
  Mit Zitat antworten Zitat
Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#10

Re: Schrift aus Ressource nutzen

  Alt 16. Feb 2010, 21:21
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:
procedure TForm1.OnCreate(Sender: TObject);
var
  lCount : pLongWord;
begin
  new(lCount);
  MyLabel.Font.Handle := LoadResFont(1,lCount);
end;
Allerdings scheint er es dann einfach auf die im Formular als Standard eingestellte Schriftart zu setzen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:48 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