![]() |
Auflisten der TFontCharset eines bestimmten Fonts
Hallo Gemeinde,
Was möchte ich den haben? Jeder Font hat eine bestimmte Anzahl von Länderspezifischen Charsets, die auch bei jedem Font unterschiedlich sind. Ich suche nach einer Lösung, die verschiedenen Charsets eines Fonts in eine Liste zu lesen. Ich meinte mal eine Lösung gehabt zu haben, aber die funktioniert wohl unter win7 nicht mehr. Die Lösung, die ich unter WinXP mal hatte konnte ich auch wiederfinden unter ![]() Tja, nur leider funktioniert die nicht mehr wie gesagt und so sehr ich mich abstrample, hab ich im Netz nichts zu diesem Thema gefunden, zumindest nichts, das mich auch nur annährend in die Richtung führt. Leider kann ich den Code nicht so ganz nachvollziehen, daher die Frage, ob einer von Euch eine andere Lösung hat. |
AW: Auflisten der TFontCharset eines bestimmten Fonts
Kannst du unter Windows 7 debuggen?
|
AW: Auflisten der TFontCharset eines bestimmten Fonts
Hallo Luckie,
mein großer Ratgeber, du hast mir bislang immer tolle Tips gegeben. Zur Antwort auf deine Frage: Nein, kann ich nicht. Zumindest in die Funktion mit dem EnumProc komm ich gar nicht rein. Sieht quasi so aus, als ob die Funktion gar nicht aufgerufen wird. Da ich mit dieser Art Aufruf s.
Delphi-Quellcode:
leider auch nicht vertraut bin, komm ich nicht klar.
EnumFontFamiliesEx(DC, LogFont, @EnumProc, lParam(CharSets), 0);
|
AW: Auflisten der TFontCharset eines bestimmten Fonts
Die Funktion enummeriert alle Schriften und zu jeder Schrift wir die Callback Funktion EnumProc aufgerufen. Im Parameter EnumLogFontEx von EnumProc stehen, dann in einem Record die Informationen zu betreffenden Schrift drin.
Setz doch mal einen Breakpunkt auf die erste Zeile nach dem Schlüsselwort Begin von der FunktionEnumProc und guck, ob du dahin kommst. Anscheinend haben die Characterset Konstanten. Eventuell haben sich diese Werte unter Windows 7 geändert. Zu beachten ist weiter hin, dass es davon eine Unicode und eine Ansi Version gibt. Wenn deine Delphi Version standardmäßig Unicode verwendet könnte es Probleme geben, das der Code aus dem SwissDelphiCenter bestimmt schon so halt ist, dass er noch kein Unicode berücksichtigt. Ich habe leider keine Unicode Delphi Version und kann das leider auch nicht testen. Aber du kannst mal S explizit als AnsiString deklarieren und EnumFontFamiliesExA aufrufen. |
AW: Auflisten der TFontCharset eines bestimmten Fonts
Hallo Luckie,
danke noch mal für deine Antwort, leider konnte ich mich nicht vorher dransetzen. Die Familie hat mich daran gehindert. :) Nichtsdestotrotz jetzt bin ich wieder dran. Ich habe mal die Konstanten in der Unit Windows geprüft und die stimmen. Dann bin ich hergegangen und habe die Strings in Ansistring gewandelt.
Delphi-Quellcode:
tja, leider ohne Erfolg. Ich setzte meinen Haltepunkt auf die 1. Zeile der EnumProc, aber ich komme einfach nicht da rein.
TCharSetRec = packed record
Name: Ansistring; [COLOR="Red"]<-- hier[/COLOR] ID: Integer end; function EnumProc(const EnumLogFontEx: TEnumLogFontEx; const NewTextMetricEx: TNewTextMetricEx; VAR FontType: Integer; Strings: TStrings): Integer; stdcall; var I: Integer; ID: Integer; S: AnsiString; [COLOR="Red"]<-- hier[/COLOR] begin ID := EnumLogFontEx.elfLogFont.lfCharSet; S := Format('Unknown charset %d', [ID]); for I := 0 to NumCharSets - 1 do if CharSets[I].ID = ID then begin S := CharSets[I].Name; Break; end; Strings.Add(S); Result := 1 end; und dann noch procedure GetAvailableCharSets(const FaceName: AnsiString; CharSets: TStrings); [COLOR="Red"]<-- hier[/COLOR] var DC: THandle; LogFont: TLogFontA; begin DC := GetDC(GetDesktopWindow); if DC <> 0 then try FillChar(LogFont, SizeOf(LogFont), 0); Move(FaceName[1], LogFont.lfFaceName, Length(FaceName)); LogFont.lfCharSet := DEFAULT_CHARSET; [COLOR="Red"]EnumFontFamiliesExA[/COLOR](DC, LogFont, @EnumProc, lParam(CharSets), 0); finally ReleaseDC(GetDesktopWindow, DC) end end; Wenn ich es richtig weiß, ist @EnumProc doch ein Zeiger auf die Funktion EnumProc. Ich habe diese Technik noch nicht wirklich soweit verinnerlicht, dass ich sagen könnte, "ok, hab's kapiert" vielleicht aber hast du nen Link auf ne gute Doku, zumindest lernen und begreifen möcht ich das schon mal, wenn ich's auch nicht gleich brauche. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:48 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