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

Windows Discussion :

Connaître le fichier TTF correspondant à une police de caractère


Sujet :

Windows

  1. #1
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut Connaître le fichier TTF correspondant à une police de caractère
    Bonjour, j'aimerais savoir comment trouver le fichier TTF correspondant à une police de caractère.

    Ex: Times New Roman -> times.ttf

    Dans mon programme j'ai une combobox rempli avec toutes les noms de police et j'aimerais savoir quel est le nom du fichier rattaché.

    Je sais que les polices ce trouvent dans le dossier %windir%/fonts

    Je sais aussi qu'il existe des moyen de lire un fichier de polices pour y trouver son nom. Le problème avec cette technique c'est que c'est un peu trop lent, car souvent les gens on plus de 500 polices de caractères. Et j'ai besoin d'afficher le nom du fichier quand on sélectionne la police dans le dropdown.

    Merci de votre aide et de rediriger si le message n'est pas au endroit.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Ok j'ai pas trouver de solution toute fabriquée sur Internet donc j'ai décidé de la faire moi même. Mon code est fais pour Borland C++Builder, mais il utilise l'API de Windows:

    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
        OSVERSIONINFOEX VersionInfo;
        VersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
        if(GetVersionEx((OSVERSIONINFO *) &VersionInfo))
        {
            TRegistry *reg = new TRegistry();
            AnsiString RegKey,
                RegData = cboFont->Text + " (TrueType)",
                FontPath = "%windir%\\Fonts\\";
            char WindowsPath[MAX_PATH];
            if(GetWindowsDirectory(WindowsPath, MAX_PATH-1))
                FontPath = AnsiString(WindowsPath) + "\\Fonts\\";
            if(VersionInfo.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
                RegKey = "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Fonts\\";
            else if(VersionInfo.dwPlatformId == VER_PLATFORM_WIN32_NT)
                RegKey = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Fonts\\";
            reg->RootKey = HKEY_LOCAL_MACHINE;
            if(reg->OpenKey(RegKey, false))
            {
                if(reg->ValueExists(RegData))
                {
                    FontPath += reg->ReadString(RegData);
                }
            }
            delete reg;
        }
    La logique est assez simple on va voir dans le registre à l'endroit suivant:
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion
    J'avais juste besoin de trouver le chemin pour les TTF, donc c'est pourquoi je fais une concaténation de " (TrueType)".
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    Dans le registre ce n'est pas le nom de la poilice de caractère qui est enregistré, il s'agit de quelque chose d'autre. C'est elfFullName de la structure ENUMLOGFONTEX. Cette structure est rempli dans le Callback EnumFontFamExProc.

    Note:
    Dans mon code plus haut, j'ai oublier de dire que cboFont->Text, c'est mon combo box rempli des noms des polices. Il est rempli avec la fonction EnumFontFamiliesEx qui appelle un Callback.
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

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

Discussions similaires

  1. Fichier TTF correspondant à sa police
    Par petitcoucou31 dans le forum Langage
    Réponses: 3
    Dernier message: 14/10/2013, 10h18
  2. retrouver le fichier TTF correspondant à une police de caractère.
    Par Lelio1407 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 07/12/2010, 16h06
  3. Fournir une police de caractères avec son application ?
    Par SLicTa dans le forum C++Builder
    Réponses: 3
    Dernier message: 31/10/2008, 10h10
  4. Lister fichiers Office contenant une chaine de caractères donnée
    Par beroot57 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 18/11/2006, 15h02

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