Im Ordner c:\lazarus\fpc\<version>\source\packages\fcl-pdf\src\ befinden sich neben PDF Dingen True Type Font Units.
Ich studiere jetzt seit Sonntag den Quelltext, habe aber noch nicht herausgefunden, wie ich damit einen geladenen True Type Font auch anzeigen kann.
Ich habe folgenden Ansatz:
Code: Alles auswählen
program fpttftest;
{mode objfpc}{$H+}
uses
  fpttf,
  fpttfsubsetter,
  fpttfencodings,
  fpfonttextmapping,
  fpparsettf;
  
{$I fontmetrics_stpdf.inc}  
type
  TFontManager = class
  private
    FontSubs: TFontSubSetter;            //Die Klasse aus der Unit fpttfsubsetter.pp
    FontFile: TFontFileInfo;                   //Die Klasse aus der Unit fpparsettf um die Fontdatei zu laden und auszulesen
    MappingL: TTextMappingList;       //Um die Glyphs in eine Liste zu bringen. Glyphindex stimmt nicht mit Zeichenindex überein, deshalb muss da eine Zuordnung 
  public                                               //aufgebaut werden
    constructor Create(AFontFileName: String);
    destructor Destroy; override;
    procedure printtextxy(X,Y: Integer; Text: String; Color: longword);
  end;
constructor Create(AFontFileName: String);
begin
  FontFile: TFontFileInfo.Create;
  FontFile.Filename := AFontFilename;
  MappingL := TTextMappingList.Create;
  FontSubs := TFontSubSetter.Create(FontFile, MappingL);
end;
destructor Destroy;
begin
  FontSubs.Free;
  inherited Destroy;
end;
procedure printtextxy(
     X,Y: Integer; 
     Text: String;           //Auszugebender Text unter Benutzung des Fonts, der Text gibt mit seinen Zeichencodes den Char Index, den ich brauche um den richtigen Glyphen 
                                   //aus der TextmappingList auszuwählen, so verstehe ich den Sinn dieser Textmappinglist.
     Color: longword   //Textfarbe
     );
begin
   //Welche Daten aus den ttf Headren muss ich wie verwenden um die Zeichen darzustellen. Zur Ausgabe soll eine PutPixel Routine dienen, aber die braucht die richtigen Daten aus 
   //den Headern. Freetype nutzt Glpyps, die in Bitmaps umgewandelt werden, aber wie macht fpttf das? 
end;
var
  FontManager: TFontManager;
  
procedure LoadFont(AFileName: String);
begin
  FontManager := TFontManager.Create(AFilename);
end;  
begin
  LoadFont(Filename);
  
  prinntextxy(50,50,'Mein TrueType Font!', colgreen);
end.
Wie also bekomme ich die richtigen Daten zur Anzeige der Fontzeichen?

 Meine Frage ob das ohne Systemspezifische Dinge läuft ist ja nun hiermit auch beantwortet. Klasse das geht also so wie ich das haben will. Somit ist das genau das was ich gesucht habe. Klar enthalten die Units auch Code der im konkreten Projekt, das ich gerade realisieren will, nicht gebraucht wird, dafür in einem anderen, aber wissen muss ich das. Gut, dass der Systemspezifische Code hier also nicht benutzt wird. Dann kann ich das für meinen Zweck so verwenden.  Wunderbar, genau was ich gesucht habe.
  Meine Frage ob das ohne Systemspezifische Dinge läuft ist ja nun hiermit auch beantwortet. Klasse das geht also so wie ich das haben will. Somit ist das genau das was ich gesucht habe. Klar enthalten die Units auch Code der im konkreten Projekt, das ich gerade realisieren will, nicht gebraucht wird, dafür in einem anderen, aber wissen muss ich das. Gut, dass der Systemspezifische Code hier also nicht benutzt wird. Dann kann ich das für meinen Zweck so verwenden.  Wunderbar, genau was ich gesucht habe.   Verein
Verein 
 Links
Links Suche
Suche