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

API, COM et SDKs Delphi Discussion :

Polices de caractères sous Windows


Sujet :

API, COM et SDKs Delphi

  1. #1
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut Polices de caractères sous Windows
    Bonjour,
    je cherche à travailler sur les polices de caractères qui sont sur mon PC.
    Je voudrais commencer par créer un fichier qui liste toutes les polices, en mettant le nom d'une police par ligne.
    J'ai crée un programme qui va chercher le nom de tout les fichiers du répertoire Windows\fonts , qui enlève l'extension et va mettre les chaînes de caractères dans un autre fichier, mais le nom de la police utilisée par Windows n'est pas toujours le même que le nom du fichier !
    Je voudrais savoir comment accéder aux noms des polices pour pouvoir les lister.
    Je ne sais si c'est différent pour chaque format de police, si c'est le cas j'aimerais surtout pouvoir le faire pour les .ttf.
    Si vous savez faire en C\C++ ou en Pascal (voire Python) je suis preneur.
    Merci

    P.S : Je suis aller voir là mais j'ai pas tout compris :/
    http://www.wotsit.org/search.asp?s=font

  2. #2
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Essaye peut-être sr msdn : http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/fontext_8ctw.asp

    J'espère que tu utilises un compilateur pour windows ( de préférence en 32bits)

    a+

  3. #3
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Bonjour !

    Si tu disposes d'un compilateur pour plate-forme Windows, vois du côté de la fonction API EnumFontFamilies.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  4. #4
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    Merci à vous deux pour vos réponses.
    Je suis aller voir mais je ne connais pas l'API et je débute en C.
    Le problème c'est que je comprends pas ce que font les procédures EnumFonts* , ou plus exactement quelles données elles utilisent ni comment elles les gèrent.
    Serait-il possible d'avoir des renseignements sur l'API ?

    Merci
    ++

  5. #5
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 996
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 996
    Billets dans le blog
    2
    Par défaut
    Normalement, l'aide en ligne (que ce soit de BPW, Delphi, C, C++) te donne au minimum tous les renseignements du SDK Microsoft. Mais si tu veux aller plus loin, ou bien si tu ne disposes pas d'aide en ligne, tu peux voir les tutoriels présents sur le forum (par exemple, sur le forum Développement Windows) ou bien chez Microsoft même (MSDN).

    Tu peux encore faire des recherches sur Google, etc. Ce serait bien le diable si tu ne trouvais pas quelques exemples pour t'éclairer.

    Car l'API, c'est vaste ! Il y en aurait pour des semaines pour en faire le tour complet. Et puis, chercher est le meilleur moyen d'apprendre !
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  6. #6
    Membre émérite
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Par défaut exemple Delphi
    salut

    si ça peut t'intéresser j'avais fait un prog dans ce style en delphi 3.. tu pourra le trouver sur mon site dans la partie Delphi ; l'exemple s'appelle FontList. si tu veux des précision n'hésite pas

    bon courage !

  7. #7
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    Merci à vous.
    Denokan, bravo pour ton prog, c'est à peu près ce que je voulais faire.
    Néanmoins je capte pas tout :/.
    J'aurais voulu créer un fichier HTML pour tester les polices et j'aurais donc besoin du nom des polices. Quand j'essaye d'utiliser Font.Name comme chaîne de caractère ça marche pas. Je pense que tu utilises le nom des polices dans ton prog puisqu'ils apparaissent à gauche du tableau...
    Dans quel variable mets-tu le nom des polices et comment stocker le nom des polices dans un tableau de chaînes de caractères stp ?
    Merci

  8. #8
    Membre émérite
    Avatar de denokan
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2002
    Messages
    434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2002
    Messages : 434
    Par défaut réponse
    salut

    bon pour obtenir le nombre de polices installées tu peux passer par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Screen.Fonts.Count
    pour obtenir le nom d'une police donnée tu tapes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Screen.Fonts[numero].Name
    par contre je ne sais plus si la liste commence à 0 ou à 1 ; à toi de tester :P

  9. #9
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    merci je teste ça bientôt et je posterais pour te dire si j'ai réussi.
    @+

  10. #10
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Pour Dos, il existe la très bonne librairie FreeType : http://www.freetype.org/

    A+

  11. #11
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    Désolé Denokan mais j'ai pas réussi à faire ce que je voulais.
    J'ai essayé de rajouter la procédure suivante dans le programme :

    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
    procedure cre(a:integer);
    var i,j:integer;
    fichier:Text;
    fic_,nom:string;
    begin
    fic_:='c:\ppp.txt';
    assign(fichier,fic_);rewrite(fichier);
     
    for i:=1 to a do
      begin
        nom:=Screen.Fonts[i].Name;  
        writeln(fichier,nom);
      end;
     
    close(fichier);
     
    end;

    en rajoutant à la fin du programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var a:integer;
    a:=Screen.Fonts.Count;
    cre(a);
    mais à la ligne nom:=Screen.Fonts[i].Name;
    ça m'a mis =>[Error] main.pas(41): Record, object or class type required

    ça m'a aussi des erreurs comme quoi a et cre était redéclaré.

    Je n'ai jamais programmé Objet, je me suis juste un peu renseigné sur ce qu'est la programmation orienté objet, je crois que le problème vient de là...

    Mais ne peut-on pas utiliser des procédures classiques dans un programme OO ?

    En espérant que tu pourras me dire où placer mes lignes dans ton programme pour que ça crée un fichier regroupant le nom des polices.
    merci
    ++

  12. #12
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Oula y'a confusion des genres, il me semble...
    Le programme qu'a donné Denokan a été fait avec Delphi... Et il n'est sûrement pas compatible avec FreePascal... ( ou tout autre compilateur d'ailleurs ). Donc si tu utilises autre chose que delphi, ca code ne pourra pas être compilé tel qu'il est maintenant. L'objet Screen possède des attributs et des méthodes spécifiques permettant d'accéder à l'affichage, aux curseurs, aux polices d'écran... Renseigne-toi dans l'aide de ton compilateur si il existe un tel objet ( si tu utilises un compilateur non Windows, tu peux d'ores et déjà oublié l'exemple proposé )
    a+

  13. #13
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    Merci wormful_sickfoot,
    je débute mais j'ai un minimum de bon sens
    J'utilise Delphi 6.
    Le problème ne vient pas de là, mais de ma méconnaissance de la POO.
    Le programme de denokan fonctionne parfaitement tel quel chez moi.
    Mais même en bidouillant dans tous les sens j'ai pas réussi à obtenir ce que je voulais.
    Ca me sort les erreurs citées plus haut.

  14. #14
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Ah pardon, je pensais que tu utilisais un autre compilateur
    Essaye peut-être 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
     
    procedure cre(a:integer); 
    var i,j:integer; 
    fichier:Text; 
    nom:string; 
    begin 
    assign(fichier,'c:\ppp.txt');
    rewrite(fichier); 
    for i:=0 to Screen.Fonts.Count-1 do 
      begin 
        nom:=Screen.Fonts[i].Name;  
        writeln(fichier,nom); 
      end; 
    close(fichier); 
    end; 
     
    begin
    cre(a); 
    end;
    C'est ton code, légèrement modifié
    a+

  15. #15
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Ah au fait, ce code est fait pour le mode console...
    C'est d'ailleurs bizarre qu'on puisse accéder à la variable Screen en mode console, mais bon... A la limité, il vaudrait mieux tout faire en mode graphique made in Delphi...
    a+

  16. #16
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    wormful_sickfoot ton code renvoie la même erreur que celui que j'ai mis plus haut. As_tu essayé de le compiler avec Delphi ?
    Il faut peut-être déclarée la procédure comme une méthode de l'objet crée par denokan dans son programme mais j'ai essayé il m'a dit que TForm1.cre n'était pas déclaré et en plus je savais pas toutes les varaibles qu'il fallait lui passer
    C'est dingue que ce soit si compliqué d'insérer une procédure dans un programme orienté objet.
    ça vient sûrement de ce que tu as dit dans le message précédent...

  17. #17
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Si tu utilises des Forms, ton application n'est pas en mode console...
    J'ai trouvé la solution ! Désolé c'est du Delphi pur, mais la méthode que tu utilises ne peut se faire qu'avec du delphi pur ( enfin il me semble... ). Voici le 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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;
     
    type
      TFontForm = class(TForm)
        Fonts: TListBox;
        procedure FormCreate(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      FontForm: TFontForm;
     
    implementation
     
    {$R *.dfm}
     
    procedure TFontForm.FormCreate(Sender: TObject);
    var i:integer;
    var f:textfile;
    begin
    assignfile(f,'c:\fonts.txt');
    rewrite(f);
    for i:=0 to Screen.Fonts.Count-1 do
    begin
    Fonts.Items.Add(Screen.Fonts[i]);
    writeln(f,Screen.Fonts[i]);
    end;
    closefile(f);
    end;
     
    end.
    L'erreur vient en fait de Screen.Fonts[i].name qui n'existe plus sous delphi 6 et 7... La propriété Screen.Fonts[i] est utilisée. Dis moi si ce code te convient !

    a+

  18. #18
    Membre Expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Par défaut
    Et encore une compatibilité ascendante qui saute...

    Bon, le code fonctionne aussi bien en mode console qu'en mode fenêtré standard.

    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
     
    procedure SaveFontsName(FileName: string);
    var
      f: TextFile;
      i: Integer;
    begin
    try
      AssignFile(f, FileName);
      Reset(f);
      for i := 0 to Screen.Fonts.Count - 1 do
        WriteLn(f, Screen.Fonts[i]);
    finally
      CloseFile(f);
    end;
    end;
    Tout ce qu'il faut, c'est utiliser l'unité Forms.

    Pour info, la programmation structurée procédurielle standard peut parfaitement être mélangée à la structure objet du Pascal de Delphi. Il ne faut pas avoir peur de ressortir la vieille artillerie.

    Pour un prog console, ça pourrait donner ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    program Project1;
     
    {$APPTYPE CONSOLE}
     
    uses
      Forms;
     
    procedure SaveFontsName(FileName: string);
    {...}
     
    begin
    SaveFontsName('C:\PPP.TXT');
    end.

    Et pour un prog fenêtré, ça donnerait ça :

    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
     
    unit Unit1;
     
    interface
     
    uses
      Forms, ...;
     
    type
      TForm1 = class(TForm)
      private
      ...
      protected
      ...
      public
      ...
      published
      ...
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    procedure SaveFontsName(FileName: string);
    {...}
     
     
    initialization
    SaveFontsName('C:\PPP.TXT');
    end.

    Ce ne sont que des exemples partiels, évidemment.

    A+

  19. #19
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Par défaut
    Je me demandais juste si c'était bien normal qu'un programme en mode console puisse utiliser la variable Screen... Ca semble pas très logique, puisque la console,... hé ben c'est la console : juste du read et du write !
    a+

  20. #20
    Membre averti
    Inscrit en
    Avril 2003
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 14
    Par défaut
    Tout d'abord merci à vous tous de m'être penché sur mon cas , désespér je l'avoue.

    Vos codes ne passent pas à la compilation, mais je sens qu'il ne s'en manque pas de beaucoup

    Tout d'abord le code de wormful_sickfoot me sort à la compilation qu'il manque la form TForm1.
    J'ai essayé de remplacer TFontForm par TForm1 mais ça me sort une autre erreur. Je ne sais pas si ça vient de Delphi 6 ou d'autre chose.


    Le code de Hdd34 me rencoie l'erreur suivante :
    Project Project1.exe raised exception class ElnOutError with message 'I/O error 105'.
    Process stopped
    Cette erreur m'a interpellé car je suis presque sûr de l'avoir déjà rencontré, je me demande si ce n'est pas une Unit à rajouter au début du fichier ou quelque chose d'aussi simple.
    As-tu la réponse Hdd34?


    Merci encore pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/12/2009, 14h31
  2. Augmenter le nombre max de caractères sous windows..
    Par saebakun dans le forum Autres Logiciels
    Réponses: 5
    Dernier message: 17/08/2006, 15h25
  3. Réponses: 14
    Dernier message: 14/03/2006, 15h20
  4. [CSS]Police de caractère sous IE et Modzilla, + FORM
    Par zulot dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 15/11/2005, 17h03
  5. [API Windows] Polices de caractères disponibles
    Par bebeours dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/11/2003, 08h28

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