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

Composants FMX Delphi Discussion :

[ComboBox] Changer la police d'une combo box


Sujet :

Composants FMX Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut [ComboBox] Changer la police d'une combo box
    Bonjour,

    Je travaille avec Delphi Rio, et je réalise une appli FMX qui doit marcher sous Android/IOS/Windows.
    Dynamiquement, je dois remplir une ComboBox, mais avec une taille de police et une couleur de police qui n'est pas celle par défaut.
    Ça compile. Lorsque l'on clique sur la ComboBox, on voit la liste des Items qui se déroule mais avec la police par défaut. En revanche, après avoir sélectionné un Item, il s'affiche bien avec la taille et la couleur personnalisée sur la combo repliée.
    Ce n'est pas ce que je veux.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    var
    article      : TListBoxItem;
     
    begin
    article := TListBoxItem.Create(self);
    article.StyledSettings := [];
    article.Text := 'Ma ligne rouge';
    article.Font.Size := 32;
    article.Font.Family := 'Verdana';
    article.FontColor := TAlphaColorRec.Red;
    ComboProfil.AddObject(article);

    Question : Quelle modification faut il apporter au code pour que la liste des items se déroule avec la police et la taille modifiée avant la sélection ?


    Cordialement

    Carmichael

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    à priori je dirais qu'il faut jouer avec les styles

    première solution : Faire un style personnalisé pour les ListBoxItem et renseigner le Stylelookup de l'item créé (attention à ce que le style soit défini dans default) perso jamais essayé , cela dit le challenge mérite que je m'y intéresse
    deuxième solution : Se faire un combobox aux petits oignons https://serge-girard.developpez.com/...lphi/Combobox/
    troisième solution : retrouver l'objet et modifier les propriétés du style, ça non plus je n'ai jamais essayé

    Bref voilà un sujet intéressant que je vais étudier

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bien, après quelques arrachages de cheveux cela fonctionne du moins pour la solution 1 voilà comment j'ai procédé

    1- j'ai posé un TListBox auquel j'ai ajouté un TItemListBox
    2- j'ai cliqué droit sur l'item créé pour pouvoir modifier le style personnalisé de ce dernier
    3- j'ai modifié alors les propriétés de listboxitem1style1 pour changer couleur et fonte
    Nom : Capture.PNG
Affichages : 995
Taille : 63,9 Ko
    4- fermeture du concepteur de style (en n'oubliant pas d'appliquer )

    5- on peut maintenant supprimer le Tlistbox
    6- ajout du Combobox
    7- changement de la hauteur de l'item ItemHeight il faut aussi mettre height à la même taille
    8- ajout d'un bouton pour tester et codification de OnClick
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    procedure TForm1.Button1Click(Sender: TObject);
    var
      i  : word;
      l : TListBoxItem;
    begin
     
    for I := 1 to 5 do
      begin
        l:=TListBoxItem.Create(ComboBox1);
        l.text:='item '+i.tostring;
        l.stylelookup:='listboxitem1style1';    // changement du style 
        combobox1.AddObject(l);
      end;
    end;
    Premier essai cela ne fonctionne pas pourtant l'élément sélectionné apparait bien en rouge dans le combobox

    C'est là où se situe l'astuce, par défaut la propriété dropDownKind est à Native il faut la changer (je pense plutôt en fonction des plateformes) à Custom et c'est gagné

    du coup je me suis dit que peut-être ton code pouvait fonctionner à partir du moment où la propriété DropDownKind était bien à Custom.
    j'ai donc rajouté dans ma procedure button1click
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for I := 1 to 5 do
      begin
        l:=TListBoxItem.Create(ComboBox1);
        l.StyledSettings:=[];
        l.text:='no style item '+i.tostring;
        l.TextSettings.FontColor:=TalphaColorRec.Green;
        l.TextSettings.Font.Family:='Courrier';
        l.TextSettings.Font.Size:=25;
        combobox1.AddObject(l);
      end;
    et cela fonctionne aussi
    Nom : Video_2019-08-27_144047_Moment.jpg
Affichages : 946
Taille : 713,0 Ko
    du coup je pense qu'il y a plein d'autres solutions mais je reste sur ces deux.

    Quel serait alors l'avantage d'utiliser le style ? D'une part moins de code à écrire, un élément de style est aussi réutilisable (d'ailleurs je l'ai construit avec un TListbox) et cerise sur le gâteau dans le style il y a aussi des effets (changement de couleur quand la souris est dessus) que la ta solution n'a pas.


    charge à toi de tester pour IOS et Android, attention en cas d'utilisation des styles celui créé par l'éditeur de trouve en plate forme windows 10 Desktop un moyen de l'avoir sur les 3 OS est de faire la chose suivante :
    1. Cliquer sur les ... de la propriété StyleCollection de StyleBook
    2. selectionner default et renommer (propriété PlatForm) (i.e toto)
    3. selectionner windows 10 Desktop
    4. effacer la propriété platform
    5. Supprimer toto

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    du coup j'ai testé pour Android (avec en plus le style Calypso) n'ayant pas de Mac ni d'IOS difficile de tester ces deux OS quant à Linux il faut que je mette le nouveau paserveur, celui pour la 10.2 ne fonctionnant pas pour Rio mais j'en ai encore besoin
    Nom : Screenshot_20190828-092505.png
Affichages : 869
Taille : 28,1 Ko
    j'en ai profité pour ajouter un case à cocher pour demander la présentation native ou non

    Cette question pourrait donner lieu à un nouveau tutoriel, une FAQ ou un billet (ou les trois) j'y songe :
    1. Une FAQ avec la simple astuce sur la propriété DropDownKind
    2. Un billet pour expliquer les deux démarches
    3. Un tutoriel pour mettre les couleurs en place avec un remplissage manuel des items mais aussi avec un remplissage via LiveBindings, qui pourrait s'accommoder en plus de mes quelques travaux d'avant vacances sur les couleurs dans les styles (à voir)
    Fichiers attachés Fichiers attachés

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 89
    Par défaut
    Effectivement ça marche.
    Merci

    Car

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 604
    Billets dans le blog
    65
    Par défaut
    Citation Envoyé par Carmichael Voir le message
    Effectivement ça marche.
    Quelle solution a été adoptée : juste la modification de dropDownKind en custom ou, en sus, l'utilisation d'un style ?

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/09/2006, 10h30
  2. changer la police d'une editbox
    Par damienlann dans le forum MFC
    Réponses: 9
    Dernier message: 12/12/2005, 09h51
  3. graphique qui varie en fonction d'une combo box
    Par decour dans le forum Access
    Réponses: 2
    Dernier message: 13/10/2005, 13h52
  4. Modif d'un ini dans une combo box
    Par Julien.alkaza dans le forum C++Builder
    Réponses: 5
    Dernier message: 03/04/2005, 23h39

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