Fonteigenschaften aus *.pfm und *.otf auslesen

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Amor_2001 »

Hallo zusammen,
ich muss aus den o.g. Fontarten den Fontnamen auslesen um ihn in der Registry ablegen zu können.

Habe etwas für OTF gefunden, bin aber leider beim Portiern gescheitert. Könnte mir bitte jemand auf die Sprünge helfen?
Für Tipps zum Thema *.pfm wäre ich dankbar

Code: Alles auswählen

; --------------------------------------------------------------------------------------------------
; Original VB Code.....
; 
; Private Sub Command1_Click()
; MsgBox OpenTypeFontReadFileName("L:\pixie-serif.otf")
; End Sub
; 
; Function OpenTypeFontReadFileName$(OTF_FileName$)
; Dim hFile&, Buffer$, iPos&
;       hFile = FreeFile
;       Open OTF_FileName For Binary Access Read As hFile
;          Buffer = Space(Lof(hFile))
;          Get hFile, , Buffer
;          iPos = InStr(1, Buffer, Chr(1) & Chr(0) & Chr(4) & Chr(2)) + 9
;          OpenTypeFontReadFileName = Mid(Buffer, iPos, InStr(iPos, Buffer, vbNullChar) - iPos)
;       Close hFile
; End Function
; --------------------------------------------------------------------------------------------------
; 
; Mein Versuch der Umsetzung.....mit Sicherheit nicht besonders gut.
; 



OTF_FileName$="g:\MercuryDisplay-Roman.otf"

      
    If OpenFile(0, OTF_FileName$) 
      length = Lof(0)                            ; Länge der geöffneten Datei ermitteln
      *MemoryID = AllocateMemory(length+1)       ; Reservieren des benötigten Speichers
      
      PokeS(*memoryid,Space(length))             ; mir Leerzeichen füllen
      
      If *MemoryID
        bytes = ReadData(0, *MemoryID, length)   ; Einlesen aller Daten in den Speicherblock
        Debug "Anzahl der gelesenen Bytes: " + Str(bytes)
      EndIf
      
      CloseFile(0)
      
      *suchstr=AllocateMemory(4)
      *suchstr1=AllocateMemory(1)
      
      PokeS(*suchstr,Chr(1) + Chr(0) + Chr(4) + Chr(2))
      
      
      
      For i=0 To length-4
        If CompareMemoryString(*memoryid+i, *suchstr)=#PB_String_Equal  
          Debug "Gefunden   "+Str(i)
          Break
        EndIf  
      Next  
      
         
      PokeS(*suchstr1,Chr(0))
      
      For j=i To length-1
        If CompareMemoryString(*memoryid+j, *suchstr1)=#PB_String_Equal  
          Debug "Gefunden   "+Str(j)
          Break
        EndIf  
      Next  
        
      
      ; hier sollte dann sowas der ausgelesene Wert stehen, zwischen Position i und j.
      ; leider erscheint dort aber kein Name
      
      

      
    EndIf
__________________________________________________
Code-Tags hinzugefügt
18.04.2013
RSBasic
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von RSBasic »

@Amor_2001
Kannst du bitte das nächste Mal Code-Tags verwenden, wenn du einen Quellcode posten möchtest?
Du findest, wenn du einen Beitrag erstellst, im Editor einen Button mit der Bezeichnung "Code". Markiere deinen gesamten Code und drücke anschließend auf diesen Button. Dann wird automatisch vor und nach deinem Code "[code]" und "[/code]" eingefügt. Danke. Dann sieht es besser aus und ist lesbarer. ;)
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Amor_2001 »

@RSBasic
Sorry, das wusste ich noch nicht, werde es aber in Zukunft beherzigen. :)

Danke für den Hinweis.
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Kiffi »

@Amor_2001: Du kannst mittels COMate die erweiterten Dateieigenschaften des Zeichensatzes auslesen

http://www.purebasic.fr/german/viewtopi ... =3&t=26292

liefert bei mir z.B.
Nr.0 -> Name: BirchStd
Nr.1 -> Schriftarttyp: OpenType
Nr.2 -> Größe: 36,3 KB
Nr.3 -> Schriftartdateinamen: C:\Windows\Fonts\BirchStd.otf
Grüße ... Kiffi
a²+b²=mc²
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Amor_2001 »

@Kiffi
Vielen Dank für den Tipp.
Wo bekomme ich denn diese COMATE her und hättest du bitte einen Codeschnipsel für mich.
Stelle mich zu unbeholfen an.

Danke
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Kiffi »

Amor_2001 hat geschrieben:Wo bekomme ich denn diese COMATE her
Wenn Du die Suchfunktion des Board benutzt hättest, wärst Du zum Beispiel hier fündig geworden:
http://www.purebasic.fr/german/viewtopi ... 78#p310876
Amor_2001 hat geschrieben:und hättest du bitte einen Codeschnipsel für mich.
Habe ich Dir doch genannt:
http://www.purebasic.fr/german/viewtopi ... 36#p311436

Grüße ... Kiffi
a²+b²=mc²
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Amor_2001 »

@Kiffi
Merci....habe sie kopiert.
Gibt es da unterschiedliche?....Mein Output sieht folgendermaßen aus:

Nr.0 -> Name: MercuryDisplay-Roman.otf
Nr.1 -> Größe: 361 KB
Nr.2 -> Typ: OpenType-Schriftartendatei
Nr.3 -> Geändert am: 18.07.2007 16:21
Nr.4 -> Erstellt am: 17.04.2013 10:45
Nr.5 -> Letzter Zugriff am: 18.04.2013 00:00
Nr.6 -> Attribute: A
Nr.7 -> Status: Online
Nr.8 -> TreeSize: 0,4 MB
Nr.9 -> Besitzer: Jeder

Leider steht unter Name nur der Dateiname und nicht der eigentliche Fontname. Hättest du eine Idee???

Mein Dank + Grüße für Dich :)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Kiffi »

der Code liest die erweiterten Dateieigenschaften aus. Also das, was erscheint,
wenn Du den Zeichensatz mit der rechten Maustaste anklickst und in dem dann
aufploppenden PopupMenu auf 'Eigenschaften' klickst.

Ich kenne mich leider mit den Informationen in den Zeichensätzen nicht so gut aus.
Kann also durchaus sein, dass in der Datei noch zusätzliche Informationen stehen, die
Du mit GetDetailsOf() nicht ermitteln kannst.

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Kiffi »

hier nochmal ein kleiner Hack, um die Namen aller installierter Zeichensätze aufzulisten:

Code: Alles auswählen

Procedure EnumFontProc(*lpelfe.LOGFONT, *lpntme.TEXTMETRIC, fontType, lParam)
  Debug PeekS(@*lpelfe\lfFaceName)
  ProcedureReturn 1
EndProcedure

LF.LOGFONT

OpenWindow(0,0,0,0,0,"", #PB_Window_Invisible)
EditorGadget(0,0,0,0,0)

EnumFontFamiliesEx_(GetDC_(GadgetID(0)), LF, @EnumFontProc() ,0 ,0)
... aber ich lese grade, dass Du Informationen eines noch nicht installierten Zeichensatzes auslesen willst?

Grüße ... Kiffi
a²+b²=mc²
Amor_2001
Beiträge: 75
Registriert: 14.12.2011 19:20

Re: Fonteigenschaften aus *.pfm und *.otf auslesen

Beitrag von Amor_2001 »

@Kiffi
Ja genau, ich muss den Fontnamen aus einem noch nicht installierten Font auslesen.
Vielleicht fällt die ja noch was geniales ein.

Vielen Dank und Grüße..... Amor_2001
Antworten