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

WinDev Discussion :

Utiliser dans un état une police de caractère non installé dans le système


Sujet :

WinDev

  1. #1
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 84
    Points : 90
    Points
    90
    Par défaut Utiliser dans un état une police de caractère non installé dans le système
    Bonjour,

    Je dois générer un état avec des libellés dans une police de caractères .ttf qui n'est pas installé par défaut dans Windows.

    Donc là j'ai deux solutions :
    1. Installer la police bien-sûr mais comme cette appli est déployée sur plusieurs postes ça va nécessiter de faire le tour de ceux-ci pour l'installer
    2. Embarquer la police dans l'appli et l'utiliser directement sans l'installer. Oui mais est-ce possible et comment faire ?

    Merci de vos lumières et bonne journée

  2. #2
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Bonjour,

    Pas sûr que cela soit possible 'simplement'. J'ai vu qu'il existe une api qui s'appelle AddFontResource / AddFontResourceEx qui permet d'installer une police présente dans le dossier windows\fonts.

    A tester : le plus difficile étant de réussir à copier dans le dossier fonts, je pense...

    [EDIT] Le lien a consulter pour l'api : https://docs.microsoft.com/en-us/win...n-and-deletion
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  3. #3
    Membre émérite
    Femme Profil pro
    .
    Inscrit en
    Janvier 2012
    Messages
    999
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : .
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2012
    Messages : 999
    Points : 2 526
    Points
    2 526
    Par défaut
    Bonsoir,

    Dixit Microsoft :
    Pour installer temporairement une police, appelez AddFontResource ou AddFontResourceEx .
    Ces fonctions chargent une police stockée dans un fichier de ressources de police.
    Cependant, il s'agit d'une installation temporaire car après un redémarrage, la police ne sera pas présente.

    Hélas, c'est là qu'est l'os !
    Donc, livrer la police dans l'install
    la mettre dans un rép. choisi et lance appli avec le .ttf.

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2021
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Santé

    Informations forums :
    Inscription : Juin 2021
    Messages : 23
    Points : 56
    Points
    56
    Par défaut
    Bonjour,

    Vous pouvez utiliser la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    SI AjouteFont(sMaFont) ALORS
    	polMaPolice est une Police
    	polMaPolice	        = PoliceCrée("Tapestry")
     
    	LIB_TestPolice.Police	= polMaPolice
    	LIB_TestPolice		= "Salut à tous"
    FIN
     
    PROCÉDURE INTERNE AjouteFont(LOCAL sChemin est chaîne UNICODE)
        RENVOYER 0 <> API("gdi32", "AddFontResourceExW", sChemin, 0x10, 0)
    FIN
    Il faut cependant ajouter la police à côté de l'exe comme dit précédemment.

    cf : https://www.developpez.net/forums/d1...t/#post7533072

    Testé en Windev 27

  5. #5
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 84
    Points : 90
    Points
    90
    Par défaut
    Voici ce que j'ai fait :

    1. J'ai copié mon fichier police dans le projet (clic droit sur "Autres" puis "Ajouter des éléments"):
    Nom : police1.png
Affichages : 172
Taille : 4,5 Ko
    2. Ensuite j'ai créé une méthode pour la charger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROCÉDURE ChargerPolice(LOCAL P_sNom est une chaîne) : booléen
    iRes			est un entier sur 8 octets
    sFichierTemp	est une chaîne	= fFichierTemp()
    SI fExtraitRessource(P_sNom, sFichierTemp) = Vrai ALORS
    	iRes = API("gdi32", "AddFontResourceA", sFichierTemp)	
    FIN
     
    RENVOYER iRes > 0
    3. On appelle la création de police et on l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MaPolice est une Police
    SI ChargerPolice("XXXX.ttf") = Faux ALORS
    	Info("Pb de chargement de police")
    SINON
    	MaPolice.Nom		= "XXXX" // Mettre le nom de la police et non le nom du fichier 
    	MaPolice.Taille	= 18
    	LIB_SansNom1.Police	= MaPolice
    FIN
    Résultat :
    Nom : police2.png
Affichages : 163
Taille : 3,0 Ko

    Donc pas de difficulté particulière et merci de m'avoir aiguillé vers la solution. Effectivement la police est "oubliée" au redémarrage du PC mais il suffit de la charger juste avant de l'utiliser. Je ne la décharge pas non plus car ce n'est pas gênant de la garder tant que le PC tourne.

    Bonne journée,

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par jlbrd Voir le message
    Voici ce que j'ai fait :

    1. J'ai copié mon fichier police dans le projet (clic droit sur "Autres" puis "Ajouter des éléments"):
    Nom : police1.png
Affichages : 172
Taille : 4,5 Ko
    2. Ensuite j'ai créé une méthode pour la charger :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROCÉDURE ChargerPolice(LOCAL P_sNom est une chaîne) : booléen
    iRes			est un entier sur 8 octets
    sFichierTemp	est une chaîne	= fFichierTemp()
    SI fExtraitRessource(P_sNom, sFichierTemp) = Vrai ALORS
    	iRes = API("gdi32", "AddFontResourceA", sFichierTemp)	
    FIN
     
    RENVOYER iRes > 0
    3. On appelle la création de police et on l'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    MaPolice est une Police
    SI ChargerPolice("XXXX.ttf") = Faux ALORS
    	Info("Pb de chargement de police")
    SINON
    	MaPolice.Nom		= "XXXX" // Mettre le nom de la police et non le nom du fichier 
    	MaPolice.Taille	= 18
    	LIB_SansNom1.Police	= MaPolice
    FIN
    Résultat :
    Nom : police2.png
Affichages : 163
Taille : 3,0 Ko

    Donc pas de difficulté particulière et merci de m'avoir aiguillé vers la solution. Effectivement la police est "oubliée" au redémarrage du PC mais il suffit de la charger juste avant de l'utiliser. Je ne la décharge pas non plus car ce n'est pas gênant de la garder tant que le PC tourne.

    Bonne journée,
    Bonjour,

    J'essaye de compléter ton code avec le déchargement mais sans succès...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    PROCÉDURE DechargerPolice(LOCAL P_sNom est une chaîne) : booléen
     
    iRes			est un entier sur 8 octets
    sFichierTemp	est une chaîne	= fFichierTemp()
    SI fExtraitRessource(P_sNom, sFichierTemp) = Vrai ALORS
     
    	iRes = API("gdi32.dll", "RemoveFontResourceA", sFichierTemp)
     
    FIN
     
    RENVOYER iRes <> 0
    Le iRes est toujours à 0 alors que les polices sont bien présente dans windows (elle se supprime au redémarrage).
    Return value

    If the function succeeds, the return value is nonzero.

    If the function fails, the return value is zero.

    Si vous avez un piste

  7. #7
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    Citation Envoyé par DevAdic Voir le message
    Bonjour,
    J'essaye de compléter ton code avec le déchargement mais sans succès...
    Bonjour,

    La discussion a plus d'un an et jlbrd n'est pas un utilisateur du forum qui soit très actif...

    Question à 2 sous : quel est l'intérêt de faire le déchargement de la police ?
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Les polices ajoutées sont accessibles depuis n'importe quel logiciel durant la session.
    Le fait de les décharger évite qu'elle reste présente une fois le logiciel fermé

  9. #9
    Membre régulier
    Inscrit en
    Février 2004
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 84
    Points : 90
    Points
    90
    Par défaut
    Bonjour,
    Citation Envoyé par frenchsting Voir le message
    La discussion a plus d'un an et jlbrd n'est pas un utilisateur du forum qui soit très actif...
    Pas très actif mais quand même présent...

    Du coup je n'ai jamais essayé de décharger la police et effectivement je ne vois pas l'intérêt moi non plus

    Bonne journée,

  10. #10
    Expert éminent
    Avatar de frenchsting
    Homme Profil pro
    multitâches-multifonctions
    Inscrit en
    Juin 2003
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : multitâches-multifonctions
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 202
    Points : 9 190
    Points
    9 190
    Par défaut
    @jlbdr : Il suffit qu'on parle de toi et hop, tu es là
    Citation Envoyé par DevAdic Voir le message
    Les polices ajoutées sont accessibles depuis n'importe quel logiciel durant la session.
    Le fait de les décharger évite qu'elle reste présente une fois le logiciel fermé
    En quoi cela est-il gênant ?

    Une fois qu'ils en ont choisi une (et encore, ils prennent souvent celle par défaut), 99,9% des utilisateurs ne changent jamais de police de caractères. Tout au plus, ils s'amusent avec les fontes (taille, gras,...) de leur police.

    En regardant cette discussion, je vois que c'est le nom du fichier qui doit être passé en paramètre
    Commencez toujours appuyer sur la touche F1 et puis n'hésitez à passer par un moteur de recherche...
    Le forum est fait pour répondre aux questions : pas la peine de me les envoyer par MP. Merci.

    Sur internet, tout est vrai ! Honoré de Balzac
    Make it real not fantasy... Herman Rarebell

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2022
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2022
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Voilà j'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE ChargerPolice(LOCAL P_sNom est une chaîne) : booléen
     
    iRes			est un entier sur 8 octets
    sFichierTemp	est une chaîne	= fFichierTemp()
    FR_PRIVATE est un entier = 16
    SI fExtraitRessource(P_sNom, sFichierTemp) = Vrai ALORS
    	iRes = API("gdi32", "AddFontResourceExA", sFichierTemp , FR_PRIVATE,0)	
    FIN
     
    RENVOYER iRes > 0
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCÉDURE DechargerPolice(LOCAL P_sNom est une chaîne) : booléen
     
    iRes			est un entier sur 8 octets
    sFichierTemp	est une chaîne	= fFichierTemp()
    FR_PRIVATE est un entier = 16
    SI fExtraitRessource(P_sNom, sFichierTemp) = Vrai ALORS
    	iRes = API("gdi32", "RemoveFontResourceExA", sFichierTemp, FR_PRIVATE,0)	
    FIN
     
    RENVOYER iRes <> 0

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2010, 11h23
  2. 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
  3. Affichage d'une police de caractères
    Par TheWeasel47 dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 09/04/2008, 11h37
  4. Option Script d'une police de caractères
    Par Jo14 dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/10/2007, 18h12

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