IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lazarus Pascal Discussion :

Lister les CharSets d'une font


Sujet :

Lazarus Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Ah la la, mettez-moi des baffes, je les mérite !

    Il y a une nouvelle version de Vollkorn, qui gère parfaitement bien le souligné, je revis !
    Je laisse tout, images et textes, pour montrer par où on passe, des fois (juste que je rajoute une note).

    Plus qu'à voir cette Bellweather Sans...

    Ah, un dernier mot pour montrer l'intérêt de l'outil dont j'ai parlé, FontDrop! :
    ___________Vollkorn-old_____________________Vollkorn-new______
    Nom : Vollkorn-old.png
Affichages : 238
Taille : 21,7 Ko Nom : Vollkorn-new.png
Affichages : 243
Taille : 9,9 Ko

  2. #2
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Salut,

    un petit point rapide :


    j'ai réexaminé tous mes codes d'exemples, de tests, mes docs, etc. et au final, une constatation s'impose :

    je n'arrive à rien sous Linux/Gtk2 avec EnumFontFamilies, et c'est sans doute pourquoi le code ultra simple de D7 ne fonctionne pas, tout comme d'autres plus sophistiqués.

    Par contre, je commence à obtenir des résultats avec EnumFontFamiliesEx.

    Et bien sûr cette information n'est donnée nulle part !
    Ni dans l'aide, ni dans les wikis, ni dans les exemples, à croire que les choses sont testées sous Windows seulement et pour les autres, dém...dez-vous !

    Alors, au cas où un jour quelqu'un tomberait sur cette discussion, la version Linux du prog D7 (notez les "Ex" rajoutés par ci par là) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    function EnumFontClBackEx(var lp: TEnumLogFontEx;
      var tm: TNewTextMetricEx;
      dwType: LongInt;//DWORD;
      lpData: lParam): Integer; stdcall;
    begin
      with TForm1(lpData), Combobox1 do
        Items.Add(lp.elfLogFont.lfFaceName);
      Result := 1;
    end;
     
    procedure TForm1.FormShow(Sender: TObject);
    var
      DC: THandle;
      LogFont: TLogFont;
    begin
      // /!\ il FAUT ces 3 lignes sinon liste vide /!\
      LogFont.lfFaceName := '';
      LogFont.lfCharSet := DEFAULT_CHARSET;
      LogFont.lfPitchAndFamily := 0;
      //lfPitchAndFamily -- Must be set to zero for all language versions of the operating system.
      // trouvé ce commentaire un jour qqpart, il me suit de code en code,
      // de prog en prog, il faudrait faire des tests plus poussés...
      DC := GetDC(0);
      if DC <> 0 then begin
        //EnumFontFamilies(Canvas.Handle, nil, @EnumFontClBack, Integer(Self));
        //EnumFontFamilies(DC, nil, @EnumFontClBack, Integer(Self));
        // Combobox vide si pas "Ex" et LogFont -- dessus ok sous D7, dessous ok sous Linux pas testé sous D7
        EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, Integer(Self), 0);
        ReleaseDC(0, DC)
      end;
    end;
    (je n'ai pas mis la proc EnumFontClBack pour ne pas alourdir, voir mon post d'il y a deux jours en cas de besoin.)

  3. #3
    Membre Expert
    Avatar de BeanzMaster
    Homme Profil pro
    Amateur Passionné
    Inscrit en
    Septembre 2015
    Messages
    1 899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Amateur Passionné
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Septembre 2015
    Messages : 1 899
    Billets dans le blog
    2
    Par défaut
    Salut je viens de tester ton petit bout code :
    Juste une chose

    j'ai remplacé EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, Integer(Self), 0);par EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, PtrInt(Self), 0);et pour infos pour ceux qui passe par là il faut mettre LCLType et LCLIntf dans les uses

    Par contre cela me donne des duplicatas, c'est pareil chez toi ?

    Nom : 2017-10-19_153607.jpg
Affichages : 568
Taille : 18,2 Ko


    EDIT : Pour éviter les duplicatas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function EnumFontClBackEx(var lp: TEnumLogFontEx; var tm: TNewTextMetricEx; dwType: LongInt; lpData: lParam): Integer; stdcall;
    Var
      S:String;
    begin
      with TForm1(lpData),ListBox1 do
      begin
         S:=lp.elfLogFont.lfFaceName;
         if Items.IndexOf(S)<0 then Items.Add(S);
      End;
      Result := 1;
    end;
    REEDIT : En faisant une recherche pour autre chose je viens de tombé là dessus
    • "L'Homme devrait mettre autant d'ardeur à simplifier sa vie qu'il met à la compliquer" - Henri Bergson
    • "Bien des livres auraient été plus clairs s'ils n'avaient pas voulu être si clairs" - Emmanuel Kant
    • "La simplicité est la sophistication suprême" - Léonard De Vinci
    • "Ce qui est facile à comprendre ou à faire pour toi, ne l'est pas forcément pour l'autre." - Mon pèrei

    Mes projets sur Github - Blog - Site DVP

  4. #4
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Yep !

    Citation Envoyé par BeanzMaster Voir le message
    Salut je viens de tester ton petit bout code :
    Juste une chose

    j'ai remplacé EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, Integer(Self), 0);par EnumFontFamiliesEx(DC, @LogFont, @EnumFontClBackEx, PtrInt(Self), 0);et pour infos pour ceux qui passe par là il faut mettre LCLType et LCLIntf dans les uses

    Par contre cela me donne des duplicatas, c'est pareil chez toi ?
    T'as remarqué que ton lien nous parle d'une fonction de CallBack nommée ...NoDup[licate]s , ? ! C'est pas pour rien, àmha.
    Alors ce qui est curieux c'est que, non, je n'ai pas de duplicatas (je te rassure : j'en ai eu aussi, mais je n'arrive plus à reproduire le bug) et pourtant je n'utilise pas ce test if blabla <0 then, ah mon bon monsieur, les joies et les mystères de l'informatique !
    Parce que ce que j'ai posté c'est simplement un copier/coller de ce qui tourne sans souci...

    Citation Envoyé par BeanzMaster Voir le message
    REEDIT : En faisant une recherche pour autre chose je viens de tomber là-dessus
    Oui, j'avais déjà vu cette discussion (j'en ai vu tellement...).
    Quand je pense que le gars il annonçait 500 et quelques polices, mais comment fait-il pour travailler correctement ? C'est un truc à devenir fou, si ça n'est pas géré en amont (install à la demande -- il existe des gestionnaires pour ça, je n'y ai jamais trouvé mon bonheur -- bah...)

    Alors puisque c'était cité dans ton lien, oui, je travaille aussi avec Screen.Fonts maintenant, c'est reposant,
    Et je suis content de voir que la première procédure qu'il donne inclut les trois lignes que j'ai notées comme obligatoires suite à essais/échecs-et-on-recommence.

  5. #5
    Membre chevronné Avatar de der§en
    Homme Profil pro
    Bretagne
    Inscrit en
    Septembre 2005
    Messages
    1 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bretagne
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 065
    Par défaut
    Juste pour le fun, sous Firemonkey, sous Xe8 j’arrivait a écrire des caractères de la police Windings avec les fonctions du Canvas d’un bitmap et depuis soit une MAJ de Windows 10 ou le passage à Delphi Tokyo, plus rien ! ! !

    Il n’y a pas que Lazarus qui a du mal avec les fonts…

  6. #6
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Citation Envoyé par der§en Voir le message
    Juste pour le fun, sous Firemonkey, sous Xe8 j’arrivait a écrire des caractères de la police Windings avec les fonctions du Canvas d’un bitmap et depuis soit une MAJ de Windows 10 ou le passage à Delphi Tokyo, plus rien ! ! !

    Il n’y a pas que Lazarus qui a du mal avec les fonts…
    Et pourtant, depuis le temps qu'elle existe, celle-là ! P'têt bien depuis 3.1, ce qui ne nous rajeunit pas !

    Ce qui est bizarre dans ton histoire, c'est que du point de vue du canvas du bitmap, que ça soit wingding ou arial ou n'importe quelle autre, c'est pareil.

    Ou alors c'est une histoire d'Unicode.
    Voilà ce que je gagne quand j'essaye de l'examiner avec ce petit outil trouvé qqpart sur le web :

    Nom : ttv.png
Affichages : 682
Taille : 16,2 Ko

    Si j'ouvre Arial ou d'autres, pas de souci.

    Peut-être que ton code ne veut que de l'Unicode ?

    Tiens-nous au courant, c'est intéressant.

  7. #7
    Expert confirmé
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    11 132
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 11 132
    Par défaut
    Re-bonjour,

    pas le temps de voir ça aujourd'hui, je me penche dessus demain ou après-demain...

    Merci à toi,

Discussions similaires

  1. [Debutant] Lister les tables d'une base de données
    Par Konrad Florczak dans le forum Langage SQL
    Réponses: 2
    Dernier message: 06/07/2005, 16h24
  2. Lister les tables d'une base
    Par pg_user dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 13/05/2005, 10h41
  3. [reseaux] Lister les processus sur une machine donnée
    Par BEAUJAULT dans le forum Programmation et administration système
    Réponses: 2
    Dernier message: 29/07/2004, 15h55
  4. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46
  5. Lister les tables d'une Base
    Par YanK dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 08/10/2003, 10h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo