Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Font Name auslesen (https://www.delphipraxis.net/101718-font-name-auslesen.html)

delphis spassbremse 17. Okt 2007 20:53


Font Name auslesen
 
Hallo,

ich hab nach langer zeit mal wieder ne frage^^

und zwar ich hab schon das forum komplett durchsucht,
aber ich finde keinen code oder eine hilfestellung, wie
ich zum beispiel aus ttf dateien die schriftartnamen auslesen
kann....

MFG

Björn

quendolineDD 17. Okt 2007 20:55

Re: Font Name auslesen
 
Heißen die Dateien nicht DATEINAME.ttf ? Wobei DATEINAME = Schriftartname :)

Müsstest dir dann mal FindFirst und FindNext anschauen und somit den Fonts-Ordner von Windows durchgucken.

Grüße

delphis spassbremse 17. Okt 2007 20:58

Re: Font Name auslesen
 
Nein... die Dateinamen können vom Namen der Schriftart abweichen.

mkinzler 17. Okt 2007 21:00

Re: Font Name auslesen
 
http://www.microsoft.com/typography/specs/default.htm
http://www.microsoft.com/typography/tools/tools.htm
http://www.delphipraxis.net/internal...t.php?p=295427

Reinhard Kern 18. Okt 2007 00:34

Re: Font Name auslesen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von delphis spassbremse
Hallo,

aber ich finde keinen code oder eine hilfestellung, wie
ich zum beispiel aus ttf dateien die schriftartnamen auslesen
kann....

MFG

Björn

Hallo Björn,

a) beschaff die TTF-Spezifikation - die Informationen sind in Tables angeordnet, das mit den Namen ist aber nicht so einfach wie du denkst, es gibt eine ganze Reihe davon.

b) nimm ein uraltes Utility wie TTFDUMP, füge ich als Upload bei, auch ein Beispiel einer 'name table'.

Die TTF-Specs kann ich leider nicht zur Verfügung stellen, weil ich Microsoft ein Non-Disclosure-Abkommen unterschrieben habe.

Gruss Reinhard

FAlter 18. Okt 2007 08:39

Re: Font Name auslesen
 
Hi,

Zitat:

Zitat von Reinhard Kern
Die TTF-Specs kann ich leider nicht zur Verfügung stellen, weil ich Microsoft ein Non-Disclosure-Abkommen unterschrieben habe.

Brauchst du auch nicht, da es andere für dich tun ;)

Version 1.66 der Spezifikation ist auf Wotsit.org zu finden, und dazu noch drei Links, z. B. OpenType direkt von MS. [edit] Das komplette Angebot von MS findest du, wenn du mkinzlers Links folgst. [/edit]

Mfg
FAlter

RWarnecke 18. Okt 2007 08:50

Re: Font Name auslesen
 
Man kann das ganze so machen :
Delphi-Quellcode:

function fontnamenoread(var lp: TEnumLogFont; var tm: TNewTextMetric; dwType: DWORD; lpData: lParam): Integer; stdcall;
begin
  Result := 1;
  with TForm1(lpData), font_name_no_read do
  begin                
    Items.Add(lp.elfLogFont.lfFaceName);
  end;
end;

// So wird die Funktion aufgerufen
EnumFontFamilies(Canvas.Handle, nil, @fontnamenoread, Integer(Self));
So werden alle installieren Schriftarten in eine Combobox eingelesen und stehen dann zur Auswahl.

Lossy eX 18. Okt 2007 10:00

Re: Font Name auslesen
 
RWarnecke das Ganze hat aber einen kleinen Hacken. So erfährst du nur die installierten Schriften. Es gibt aber auch durchaus die Möglichkeit mittels AddFontResource eigene Schriften im System zu installieren. Wenn diese zum Beispiel speziell nur bei deiner Anwendung dabei liegen. Es gibt aber keine offizielle Möglichkeit von einer Datei den Namen zu erfragen.

Das habe ich das selber in meinem aktuellen Projekt benötigt. Es gibt dazu glaube ich von Microsoft sogar ein direktes Codebeispiel allerdings C und ich habe den Link davon nicht mehr. Das deckt sich aber mit dem was mkinzler als letzten Link gepostet hat. ABER der Code hat ein paar Schwächen.

1. Der Code betrachtet lediglich die Windowsnamen und vernachlässigt dabei vollkommen die SprachID. Denn die Windowsschriften haben häufiger mehr als nur einen Namen. Und wenn man einem deutschem Windows "Arial Bold" vor die Füße knallt dann bekommt man ungefragt das Standardfont vorgesetzt. Da es auch möglich ist, dass eine Schrift gar nicht die aktuelle Sprache unterstützt gehe ich her und lese alle Namen ein und priorisiere sie anhand ihrer Treffergenauigkeit. Den besten Treffer liefere ich dann zurück.

2. Richtet sich der Code nur auf den Vollständigen Namen. Den man aber nicht immer haben will und der auch nicht unbedingt enthalten sein muss. Es kann auch sein, dass man sich diesen selber aus dem Namen und dem Style namen zusammen setzen muss.

Der Code zu meiner Lösung befindet sich am Ende dieses Postings in der "Windows Bibliothek" und dort in der Datei "Source\TextSuiteTTFUtils.pas". Damit ist es auch Möglich von einer auf einen DC zugewiesene Schrift den Namen zu erfragen. Da man sich von diesem einzelne Tabellen (Namenstabelle) zurückgeben lassen kann.

PS: Vorsicht. In der Datei ist auch noch Code enthalten mit der man einen Zeichencode in einen Glyphindex umwandeln "kann". Dieser Code funktioniert allerdings nicht so ganz.

RWarnecke 23. Okt 2007 16:22

Re: Font Name auslesen
 
Zitat:

Zitat von Lossy eX
RWarnecke das Ganze hat aber einen kleinen Hacken. So erfährst du nur die installierten Schriften. Es gibt aber auch durchaus die Möglichkeit mittels AddFontResource eigene Schriften im System zu installieren. Wenn diese zum Beispiel speziell nur bei deiner Anwendung dabei liegen.

Aber auch die Funktion Screen.Fonts gibt eine Liste der installierten Schriftarten aus.

delphis spassbremse 24. Okt 2007 16:25

Re: Font Name auslesen
 
ich dachte ich hätte erwähnt, dass diese schriften nicht installiert sind.
Also ich will per Dateipfad auf die Daten zugreifen...

MFG

Björn


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Seite 1 von 2  1 2      

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