AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Auflisten der TFontCharset eines bestimmten Fonts

Auflisten der TFontCharset eines bestimmten Fonts

Ein Thema von Ookami · begonnen am 4. Mär 2012 · letzter Beitrag vom 4. Mär 2012
Antwort Antwort
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#1

Auflisten der TFontCharset eines bestimmten Fonts

  Alt 4. Mär 2012, 12:22
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
http://www.swissdelphicenter.ch/de/showcode.php?id=892

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.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

AW: Auflisten der TFontCharset eines bestimmten Fonts

  Alt 4. Mär 2012, 12:57
Kannst du unter Windows 7 debuggen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#3

AW: Auflisten der TFontCharset eines bestimmten Fonts

  Alt 4. Mär 2012, 13:46
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.
EnumFontFamiliesEx(DC, LogFont, @EnumProc, lParam(CharSets), 0); leider auch nicht vertraut bin, komm ich nicht klar.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

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

AW: Auflisten der TFontCharset eines bestimmten Fonts

  Alt 4. Mär 2012, 13:58
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.
Michael
Ein Teil meines Codes würde euch verunsichern.

Geändert von Luckie ( 4. Mär 2012 um 14:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Ookami
Ookami

Registriert seit: 20. Nov 2009
Ort: Baden Württemberg
77 Beiträge
 
Delphi 2009 Architect
 
#5

AW: Auflisten der TFontCharset eines bestimmten Fonts

  Alt 4. Mär 2012, 18:41
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:
  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;
tja, leider ohne Erfolg. Ich setzte meinen Haltepunkt auf die 1. Zeile der EnumProc, aber ich komme einfach nicht da rein.
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.
Wolfgang
Grüße und Danke
Wolfgang
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 14:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf