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

C++Builder Discussion :

FMX Lister les polices disponibles


Sujet :

C++Builder

  1. #1
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut FMX Lister les polices disponibles
    Bonjour à tous

    Savez-vous en Firemonkey comment faire pour lister les polices de caractères.
    En VCL on récupérait la liste des polices avec cette commande.

    Merci d'avance pour votre aide

  2. #2
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    la FireMonley étant multi plateforme c'est au développeur d'écrire un peu plus de code

    ex:
    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
    54
    55
    56
     
     
    le .H
    #ifndef Unit47H
    #define Unit47H
    //---------------------------------------------------------------------------
    #include <System.Classes.hpp>
    #include <FMX.Controls.hpp>
    #include <FMX.Forms.hpp>
    #include <FMX.ListBox.hpp>
    #include <FMX.Types.hpp>
    #include <FMX.Dialogs.hpp>
    #include <FMX.Printer.hpp>
    #include <FMX.Controls.Presentation.hpp>
    #include <FMX.Edit.hpp>
    //---------------------------------------------------------------------------
    class TForm47 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TComboBox *ComboBox1;
    	TEdit *Edit1;
    	void __fastcall ComboBox1Change(TObject *Sender);
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TForm47(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm47 *Form47;
    //---------------------------------------------------------------------------
    #endif
     
     
    //le.cpp
    #include <fmx.h>
    #pragma hdrstop
    #include <FMX.Graphics.hpp>
    #include "Unit47.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.fmx"
    TForm47 *Form47;
    //---------------------------------------------------------------------------
    __fastcall TForm47::TForm47(TComponent* Owner)
    	: TForm(Owner)
    {
      Fmx::Printer::TPrinter* myPrinter=Fmx::Printer::Printer();// retourne une instance globale de l'object Printer
      ComboBox1->Items->Assign(myPrinter->Fonts);  // remplissage d'une ComboB0x avec toutes les polices trouvées dans la property Font  attention sous OSX cette propriété ne retourne tien
    }
    //---------------------------------------------------------------------------
     
     
    void __fastcall TForm47::ComboBox1Change(TObject *Sender)
    {
      Edit1->Text=ComboBox1->Items->Strings[ComboBox1->ItemIndex]; // on remplit une EditBox avec la séléction effectuée dans la COmboBox
    }
    //---------------------------------------------------------------------------
    bien cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  3. #3
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Merci pour ton aide DjmSoftware

    Je me suis donc créé un composant dérivé de TComboBox ou à la construction je remplit le ComboBox avec la Liste des Polices.

    ComboBoxPolice.h
    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
     
    //---------------------------------------------------------------------------
     
    #ifndef ComboBoxPoliceH
    #define ComboBoxPoliceH
     
    //---------------------------------------------------------------------------
     
    #include <System.SysUtils.hpp>
    #include <System.Classes.hpp>
    #include <FMX.Controls.hpp>
    #include <FMX.ListBox.hpp>
    #include <FMX.Types.hpp>
    #include <FMX.Printer.hpp>
     
    //---------------------------------------------------------------------------
     
    // ComboBoxPolice
    class PACKAGE TComboBoxPolice : public TComboBox
    {
    	private:
     
    		// Méthode qui retourne l'indice ou ajouter la Police
    		int __fastcall IndicePolice(String Police, TStringList *ListePolice);
     
     
    	protected:
     
    	public:
     
    		__fastcall TComboBoxPolice(TComponent* Owner);
     
     
     
    	__published:
     
    };
     
    //---------------------------------------------------------------------------
     
    #endif
    ComboBoxPolice.cpp
    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    //---------------------------------------------------------------------------
     
    #include <fmx.h>
     
    #pragma hdrstop
     
     
    #include "ComboBoxPolice.h"
    #pragma package(smart_init)
     
    //---------------------------------------------------------------------------
    // ValidCtrCheck est utilisée pour garantir que les composants créés n'ont pas
    // de fonctions virtuelles pures.
    //
     
    static inline void ValidCtrCheck(TComboBoxPolice *)
    {
    	new TComboBoxPolice(NULL);
    }
     
    //---------------------------------------------------------------------------
     
    // Constructeur
    __fastcall TComboBoxPolice::TComboBoxPolice(TComponent* Owner)
    	: TComboBox(Owner)
    {
    	// On récupère une instance globale de l'object Printer
    	Fmx::Printer::TPrinter* myPrinter=Fmx::Printer::Printer();
     
    	// On crée la Liste des Polices
    	TStringList *ListePolices = new TStringList();
     
    	// on crée la Liste des Polices trillées
    	TStringList *ListePolicesTrillees = new TStringList();
     
    	// On affecte la Liste des Fonts à la Liste des Polices
    	ListePolices->Assign(myPrinter->Fonts);
     
    	// On balaye la Liste des Polices
    	for(int i = 0; i < ListePolices->Count; i++)
    	{
    		// On récupère la Police à l'indice i
    		String Police = ListePolices->Strings[i];
     
    		// On récûpère l'indice ou l'on doit ajouter la Police
    		int Indice = IndicePolice(Police, ListePolicesTrillees);
     
    		// Si l'indice retourné est -1
    		if(Indice == -1)
    		{
    			// on ajoute la Police à la fin de la Liste
    			ListePolicesTrillees->Add(Police);
    		}
    		// Sinon l'indice retourné n'est pas -1
    		else
    		{
    			// on insère la Police à l'indice Indice
                            ListePolicesTrillees->Insert(Indice, Police);
                    }
    	}
     
    	// On assigne la Liste des Polices trillées au ComboBox
    	Items->Assign(ListePolicesTrillees);
     
    	// On va sélectionné la Police Arial par défaut
    	ItemIndex = Items->IndexOf("Arial");
    }
     
    //---------------------------------------------------------------------------
     
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
     
    //---------------------------------------------------------------------------
    // PRIVATE
    //---------------------------------------------------------------------------
     
    //---------------------------------------------------------------------------
     
    // Méthode qui retourne l'indice ou ajouter la Police
    int __fastcall TComboBoxPolice::IndicePolice(String Police, TStringList *ListePolice)
    {
    	// on balaye las Elements de Fonts
    	for(int i = 0; i < ListePolice->Count; i++)
    	{
    		// Si la chaine de la Police à l'indice est supérieure à celle de la Police courante
    		if(Police.Compare(ListePolice->Strings[i]) < 0)
    		{
    			// On retourne l'indice
    			return i;
    		}
    	}
     
    	// On retourne donc -1
    	return -1;
    }
     
    //---------------------------------------------------------------------------
    //---------------------------------------------------------------------------
     
    namespace Comboboxpolice
    {
    	void __fastcall PACKAGE Register()
    	{
    		TComponentClass classes[1] = {__classid(TComboBoxPolice)};
    		RegisterComponents(L"Mes Composants", classes, 0);
    	}
    }
     
    //---------------------------------------------------------------------------
    Cela fonctionne bien mais lorsque j'utilise mon composant et que je veux lui affecter l'ItemIndex -1 pour ne selectionné aucune police, j'ai une violation d'accès.

    Saurais-tu d'où pourrais venir le problème

  4. #4
    Membre chevronné
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Points : 2 187
    Points
    2 187
    Billets dans le blog
    1
    Par défaut
    Salut
    2 Remarques
    1.Attention à ne pas oublier de détruire les objets TStringList aprés utilisation dans le cas contraire tu va créer des fuites mémoires
    2. tu te compliques singulièrement la tâche les objets TStringList ont la possibilités d’être trié...

    ma proposition de modification ci-dessous

    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
     
     
    __fastcall TComboBoxPolice::TComboBoxPolice(TComponent* Owner)
    	: TComboBox(Owner)
    {
    	// On récupère une instance globale de l'object Printer
    	Fmx::Printer::TPrinter* myPrinter=Fmx::Printer::Printer();
     
    	// on crée la Liste des Polices trillées
    	 TStringList* SortedList=new TStringList();
             SortedList->Sorted=true; // on active le tri automatique
             SortedList->Assign(myPrinter->Fonts);
             SortedList->Sort(); // tri de la liste
             ComboBox1->Items->Assign(SortedList);// Assignation du résultat 
             delete SortedList;// destruction de la liste triée
     
    }
    et voila le tour est joué

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  5. #5
    Membre confirmé Avatar de kurul1
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    933
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 933
    Points : 466
    Points
    466
    Par défaut
    Tu me l'apprend qu'on pouvais trier une StringList, je ne savais pas, c'est clair que du coup ca simplifie les choses.

    Je vais modifer cela de suite.

    Et du coup mon problème mémoire est résolu, cela venait donc de ne pas avoir détruit la StringList

    Merci à toi.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/04/2007, 11h24
  2. Réponses: 1
    Dernier message: 13/10/2006, 10h32
  3. [PHP] Fonction : lister les polices
    Par Amidal dans le forum Langage
    Réponses: 4
    Dernier message: 17/05/2006, 16h26
  4. [C#] Lister les serveurs disponibles dans le réseau
    Par fafa139 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 10/04/2006, 18h09
  5. Lister les ports disponibles
    Par belfaigore dans le forum C++Builder
    Réponses: 17
    Dernier message: 07/02/2005, 16h58

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