RETROUVER LE NOM D'UNE POLICE DE CARACTÈRES AVEC LE REGISTRE

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 30 mai 2004 à 22:56
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 - 11 juin 2004 à 21:04
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/23276-retrouver-le-nom-d-une-police-de-caracteres-avec-le-registre

cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
11 juin 2004 à 21:04
J'ai refait le code (pas en entier bien sûr): création d'une petite unité à part que tous pourront reprendre. Par ailleurs, le problème de GetWindowsDirectory est règlé.

Plusieurs choses sur ce projet:
1) pourquoi ne pas avoir utilisé Screen.Fonts ? L'intérêt est nul puisque cela ne nous donne pas le nom du fichier. De plus, le nom donné par Screen.Fonts n'est pas le nom de la clé dans le registre: respectivement "Arial" et "Arial (TrueType)".
2) avant la mise à jour, il n'y avait que la TListBox et on ne voyait pas très rapidement le nom des polices. J'ai donc ajouté un TListView. Critique: si j'avais énuméré les valeurs du registre puis lu leur contenu, ça aurait été plus rapide. Certes, mais cette méthode n'illustre pas le principe du projet.
3) Le TListView ne fait pas la liste de toutes les polices du système mais seulement de celles qui se trouvent dans un dossier précis donné par l'utilisateur. Si je sélectionne 5 polices et que je les met dans un dossier, si je demande au programme de me donner leurs noms, je n'aurais que leurs noms (et pas les autres). Par défaut, dans le programme, le répertoire est c:\windows\fonts\. Mais en modifiant le programme, on arrive facilement à quelques résultats.

J'espère avoir été compréhensible...
cs_grandvizir Messages postés 1106 Date d'inscription samedi 8 novembre 2003 Statut Membre Dernière intervention 3 septembre 2006 22
3 juin 2004 à 21:11
[DelphiProg]
1) J'ai admis que la majeure partie des gens ont un simple c:\windows\.
2) Je ne connaissais pas GetWindowsDirectory, mais une autre qui détecte C:\Program Files\. C'est surement pas si différent ??
3) Pourtant, je fais l'effort de séparer les codes. J'ai justement fait une procédure qui peut être réutilisable, mais je ne peux toujours pas m'empêcher d'utiliser l'interface. Une procedure avec 40000 paramètres n'est pas forcément agréable. De plus, il suffit de remplacer que quelques lignes...

[DrJerome]
1) Je n'ai pas détecté direct dans le fichier, car je ne suis pas renseigné au niveau des entêtes et de la manière dont les fichiers TTF sont bâtis. Donc, le registre est facile...
2) Ton code à l'air sympa.

[DelphiCool]
Je suis toujours dans l'excellent bon vieux Win98 et ne connait pas la disposition de WinXP. Ce décalage temporel sera prochaînement résolu.
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
31 mai 2004 à 13:40
je crois que le mieux c'est que tu créer une variable globale (windows et system)

et tu recherche les chemin avec les API windows

J'ai XP Pro et pas de répertoire WINNT
DelphiCool Messages postés 455 Date d'inscription mardi 24 juillet 2001 Statut Membre Dernière intervention 10 mars 2009
31 mai 2004 à 13:23
comme dit delphiprog.
il est preférable de mettre ceci dans FormCreate

var Arr :Array[0..255]of char;
Windows :string;
begin
GetWindowsDirectory(Arr, 255);
Windows := Arr;
if Windows[length(Windows)] <> '\' then Windows := Windows + '\';

frPolices.Show;
EnumFiles( cbPolices.Items, Windows + '\fonts', '*.ttf;*.fon');
end;
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
31 mai 2004 à 09:58
vous reconnaitrez dans ces deux JPG
(http://jerome-rod.chez.tiscali.fr//images/glyf1.JPG
et
http://jerome-rod.chez.tiscali.fr//images/glyf2.JPG)

l'indien que j'ai créé en caractère de police et que j'ai mis dans mon, logo :
http://jerome-rod.chez.tiscali.fr//jroddore.gif


DrJerome JROD DorotheeJ
DRJEROME Messages postés 436 Date d'inscription jeudi 9 janvier 2003 Statut Membre Dernière intervention 5 février 2015
31 mai 2004 à 09:53
Regardes ici :
http://www.phidels.com/php/index.php3?page=../php/pagetelechargementzip.php3&id=515

j'avais fait une autre méthode différente pour analyser les polices et leur nom interne (c'est pas la meilleure méthode là non plus...j'en conviens !)

Toutefois, il y a 3-4 ans en arrière, j'ai fait un logiciel de création de police d'écriture (je créais les caractères par des courbes de Bézier), il est possible de prendre directement le nom réél d'une police dans son code (fichier ttf par exemple) c'est ce que j'utilisais dans mon logiciel, si un jour j'ai le temps, je ressortirai ce code...

Voici 2 images de mon logiciel (que je n'ai jamais commercialisé car fait pour le plaisir dès le départ :)

http://jerome-rod.chez.tiscali.fr//images/glyf1.JPG

http://jerome-rod.chez.tiscali.fr//images/glyf2.JPG
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
30 mai 2004 à 22:56
J'aurais quelques remarques à faire :
1- le disque sur lequel est installé Windows est supposé être c:. Or, sur une machine en multiboot, on peut installer différents Windows sur diférentes partitions.
2- le répertoire d'installation de Windows est par défaut \Windows (ou \WinNT) mais ce n'est pas une obligation.

Comme je l'ai déjà fait remarquer à d'autres membres sur ce site, il existe une fonction dans les API qui donne le répertoire d'installation de windows (toutes versions) : GetWindowsDirectory.
Alors, servez-vous en !

3- je regrette que, trop souvent, le code qui serait intéressant s'il était facilement réutilisable, se trouve mélangé avec le code nécessaire à la gestion d'un interface. Ce qui oblige :
- soit à faire des copier/coller dans une autre application, (la plus mauvaise solution)
- soit à séparer les deux pour qu'il devienne enfin réellement facilement réutilisable. Mais cela entraine un travail parfois insurmontable pour certains.
DE-COU-PLER, il FAUT découpler le code de l'interface du code que l'on veut réutiliser. Comment ? eh bien tout simplement en créant une unité supplémentaire et en n'exposant dans sa partie interface que ce qui est réellement utile les d'autres unités.

Cela dit, comme le code est bien écrit, ces remarques devraient pouvoir être appliquées facilement.
Beau travail.
Rejoignez-nous