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

VB 6 et antérieur Discussion :

Famille de font


Sujet :

VB 6 et antérieur

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut Famille de font
    bonjour, j'aimerais savoir s'il était possible de connaître la famille d'une font (sérif, sans sérif... ) et si oui comment faire ?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de OhMonBato
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    2 660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 660
    Par défaut
    Comment ça ? Connaitre le nom de la police utilisée dans tel ou tel controle ?

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Non, je cherche à connaître la famille d'une police en connaissant son nom (la police "Arial" fait partie de la famille "sans sérif" par exemple...).
    Y a-t-il une propriété des objets fonts qui donne cette famille ?

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    Non ... pas de "propriété d'objet" pour celà ...

    Mais deux fonctions de l'Api de Windows :

    EnumFontFamilies
    EnumFontFamiliesEx

    Toutes deux dans la librairie gdi32

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    J'ai fait quelques recherches sur la msdn...

    mais pas moyen de comprendre comment tirer la famille d'une police en connaissant son nom...
    La fonction EnumFontFamiliesEx énumère bien toutes familles sur le disque ?

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Montre donc ton code.
    On verra après

    Edit : moi, je suis prêt (avec un exemple pour ta police Arial)...

    Mais je viens de voir tes autres discussions !!!
    Certaines sont restées sans suite, bien que résolues !!!

    Alors : donnant donnant...

    Tu fais cet effort : je penserai à mettre ici le code que tu attends..
    Tu ne le fais pas : et je ne ferai rien non plus ...

  7. #7
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon..

    Je vois que c'est fait.

    Alors :

    Sur une Form : 1 bouton de commande Command1 et une listbox List1

    Ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Explicit
     
    Private Sub Command1_Click()
      Dim hDC As Long, mapolice As String
      Me.AutoRedraw = True
      mapolice = "Arial"
      List1.Clear
      EnumFontFamilies Me.hDC, mapolice, AddressOf EnumFontFamProc, ByVal 0&
    End Sub
     
    Private Sub Form_Activate()
     Set toto = List1
    End Sub
    Et dans un Module.Bas :

    ce code :

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    Option Explicit
     
    Public Const LF_FACESIZE = 32
    Type LOGFONT
       lfHeight As Long
       lfWidth As Long
       lfEscapement As Long
       lfOrientation As Long
       lfWeight As Long
       lfItalic As Byte
       lfUnderline As Byte
       lfStrikeOut As Byte
       lfCharSet As Byte
       lfOutPrecision As Byte
       lfClipPrecision As Byte
       lfQuality As Byte
       lfPitchAndFamily As Byte
       lfFaceName(LF_FACESIZE) As Byte
    End Type
    Type NEWTEXTMETRIC
       tmHeight As Long
       tmAscent As Long
       tmDescent As Long
       tmInternalLeading As Long
       tmExternalLeading As Long
       tmAveCharWidth As Long
       tmMaxCharWidth As Long
       tmWeight As Long
       tmOverhang As Long
       tmDigitizedAspectX As Long
       tmDigitizedAspectY As Long
       tmFirstChar As Byte
       tmLastChar As Byte
       tmDefaultChar As Byte
       tmBreakChar As Byte
       tmItalic As Byte
       tmUnderlined As Byte
       tmStruckOut As Byte
       tmPitchAndFamily As Byte
       tmCharSet As Byte
       ntmFlags As Long
       ntmSizeEM As Long
       ntmCellHeight As Long
       ntmAveWidth As Long
    End Type
    Declare Function EnumFontFamilies Lib "gdi32" Alias "EnumFontFamiliesA" (ByVal hDC As Long, ByVal lpszFamily As String, ByVal lpEnumFontFamProc As Long, LParam As Any) As Long
    Public toto As ListBox
    Function EnumFontFamProc(lpNLF As LOGFONT, lpNTM As NEWTEXTMETRIC, ByVal FontType As Long, LParam As Long) As Long
       Dim FaceName As String
       FaceName = StrConv(lpNLF.lfFaceName, vbUnicode)
       toto.AddItem Left$(FaceName, InStr(FaceName, vbNullChar) - 1)
       EnumFontFamProc = 1
    End Function
    Lance et clique sur Command1

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Bon... Je dois êtr evraiment con mais je ne comprends pas...

    Avec ton code j'ai ça :
    Arial
    Arial CE
    Arial CYR
    Arial Greek
    Arial TUR
    Arial Baltic
    Arial
    Arial CE
    Arial CYR
    Arial Greek
    Arial TUR
    Arial Baltic
    Arial
    Arial CE
    Arial CYR
    Arial Greek
    Arial TUR
    Arial Baltic
    Arial
    Arial CE
    Arial CYR
    Arial Greek
    Arial TUR
    Arial Baltic
    dans la liste...
    et je ne vois vraiment pas ce que ça représente... à part les jeux de caractères de la police

  9. #9
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par myrddin772 Voir le message
    Non, je cherche à connaître la famille d'une police en connaissant son nom (la police "Arial" fait partie de la famille "sans sérif" par exemple...).
    Y a-t-il une propriété des objets fonts qui donne cette famille ?
    Et c'est ce que tu as : toutes les Fonts de la famille Arial sur ta machine ...

    Va falloir que tu précises ta question , dans ce cas

  10. #10
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Donc, cela me donne toutes les polices de la famille "Arial" mais comment obtenir toutes les polices de la famille "sans serif" ?
    Parce que, si je comprends bien, cela me donne toutes les polices "enfants" (celle dont la famille est la police que j'ai précisé)...
    Et si, dans ton code, je remplace :
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mapolice = "sans serif"
    Est-ce que ça marche ? (je ne suis pas chez moi, donc je ne peux pas essayer pour le moment...)

    Pour préciser ma question : Est-il possible d'obtenir la nom de la famille ("serif", "sans serif"...) à laquelle appartient une police donnée ?
    Je ne vois pas comment demander ça autrement peut-être suis-je totalement con...

  11. #11
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Réponse à ta 1ère question :

    Oui (et c'est la raison pour laquelle je t'ai donné un exemple avec possibilité de définir ta Police !!!) mais à condition (bien évidemment) de donner le nom exact de la police concernée (Y compris la casse).

    Réponse à ta 2ème question :

    Si, à partir d'un nom de police (Exact comme ci-dessus), tu cherches à savoir à quel "Pitch and Family" ladite police appartient, c'est très différent et tu dois savoir que ces "Pitch And Family" sont classés par numéro (et pas par nom) ...

    Et dans ce cas (mais il va falloir que tu te dégourdisse un peu, quand même !...) :

    Dans une Form :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Form_Activate()
      police = "Arial" ' ou ce que tu veux, pourvu que le nom soit exact, y compris la casse...
      EnumFonts Me.hDC, vbNullString, AddressOf EnumFontProc, 0
    End Sub
    Et dans un module :

    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
    32
    33
    Private Const LF_FACESIZE = 32
    Type LOGFONT
            lfHeight As Long
            lfWidth As Long
            lfEscapement As Long
            lfOrientation As Long
            lfWeight As Long
            lfItalic As Byte
            lfUnderline As Byte
            lfStrikeOut As Byte
            lfCharSet As Byte
            lfOutPrecision As Byte
            lfClipPrecision As Byte
            lfQuality As Byte
            lfPitchAndFamily As Byte
            lfFaceName(LF_FACESIZE) As Byte
    End Type
    Declare Function EnumFonts Lib "gdi32" Alias "EnumFontsA" (ByVal hDC As Long, ByVal lpsz As String, ByVal lpFontEnumProc As Long, ByVal lParam As Long) As Long
    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDst As Any, pSrc As Any, ByVal ByteLen As Long)
    Public police As String
    Function EnumFontProc(ByVal lplf As Long, ByVal lptm As Long, ByVal dwType As Long, ByVal lpData As Long) As Long
        Dim LF As LOGFONT, FontName As String, fontfam As String, ZeroPos As Long, ZeroPos1 As Long
        CopyMemory LF, ByVal lplf, LenB(LF)
        FontName = StrConv(LF.lfFaceName, vbUnicode)
        fontfam = StrConv(LF.lfPitchAndFamily, vbUnicode)
        ZeroPos = InStr(1, FontName, Chr$(0))
        ZeroPos1 = InStr(1, fontfam, Chr$(0))
        If ZeroPos > 0 Then FontName = Left$(FontName, ZeroPos - 1): fontfam = Left$(fontfam, ZeroPos1 - 1)
        If FontName = police Then
          MsgBox FontName & " appartient à la famille Pitch and Family " & fontfam
        End If
        EnumFontProc = 1
    End Function
    Lance et tu devrais comprendre....
    Et si tu ne vois toujours pas, ma foi... continue sans moi ...

  12. #12
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Et bien je vais essayer ça ce soir... et désolé d'avoir une question sans comprendre...

  13. #13
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Bon ben j'ai compris ce que ton code faisait...
    En cherchant un peu, on doit pouvoir donner un nom à chaque valeur de "Pitch and family"...

    Merci pour ton "aide"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Image font d'ecran
    Par jeannot27 dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/01/2004, 11h47
  2. [SWING][FONT] choisir la police par défaut
    Par narmataru dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 21/02/2003, 10h35
  3. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41
  4. comment changer d'attribut de fonte dans un Tlabel?
    Par sb dans le forum Composants VCL
    Réponses: 3
    Dernier message: 21/08/2002, 16h53
  5. TextOut : comment changer de font
    Par Freakazoid dans le forum DirectX
    Réponses: 2
    Dernier message: 15/07/2002, 20h46

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