wxDev.fr, le portail francophone consacré à wxWidgets ! ( The french portal for wxWidgets )  
Esp. membre
Recheche rapide



Recherche avancée
Statistiques
Membres inscrits :2359

Membres en ligne : 0
Invités en ligne : 1
Pub hébergeur
Pourquoi cette pub ?

Valid XHTML 1.0 Transitional

Valid CSS2

Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Changer de polices pour wxComboBox
Conversation : Changer de polices pour wxComboBox
28-06-2011 19:20:59  Changer de polices pour wxComboBox #1
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Bonjour à tous,

Je débute sous wxWidgets et je voudrais savoir si vous connaissez s'il est possible de changer de police pour chaque élément de wxComboBox?

Merci d'avance pour vos réponses,

Jon
29-06-2011 08:10:40  Re: Changer de polices pour wxComboBox #2
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Salut.

A mon avis, pour ce genre de choses, il va falloir passer par une wxOwnerDrawnComboBox.

Dans le cas d'une wxComboBox classique, tu ne pourras que changer de façon globale la police de caractères.

L'exemple "widgets" fourni avec les sources wxWidgets utilise une wxOwnerDrawnComboBox (ça pourra te servir de base pour l'utiliser).

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-06-2011 08:49:51  Re: Changer de polices pour wxComboBox #3
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Salut et merci pour ta réponse,

Je dois avouer que j'ai regardé un peu du coté de wxOwnerDrawnComboBox, mais sans résultats.
Je pense qu'il faut surcharger la méthode OnDrawItem et faire un peu comme pour wxSimpleHtmlListBox (idéalement).
Pour le moment, je ne vois pas comment faire, mais je regarde tout ça.

Jon
----------
J'ai trouvé le moyen de faire ce que je souhaite. Comme je sais que ça pourrait aider bien des gens, voici le code:

Code wxWidgets:

 
#include "wx/odcombo.h"
class wxFontStyleComboBox : public wxOwnerDrawnComboBox
{
public:
    virtual void OnDrawItem( wxDC& dc,
                             const wxRect& rect,
                             int item,
                             int flags ) const
    {
        if ( item == wxNOT_FOUND )
            return;
 
        wxRect r(rect);
        r.Deflate(3);
        r.height -= 2;
 
        if ( item == 0 ){
            wxFont current_font(8, wxFONTFAMILY_DEFAULT , wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Arial");
            dc.SetFont(current_font);
        }
        else if ( item == 1 ) {
            wxFont current_font(8, wxFONTFAMILY_DEFAULT , wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Arial Black");
            dc.SetFont(current_font);
        }
        else if ( item == 2 ) {
            wxFont current_font(8, wxFONTFAMILY_DEFAULT , wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Bookman Old Style");
            dc.SetFont(current_font);
        }
        else if ( item == 3 ) {
            wxFont current_font(8, wxFONTFAMILY_DEFAULT , wxFONTSTYLE_NORMAL, wxFONTWEIGHT_LIGHT, false, "Comic Sans MS");
            dc.SetFont(current_font);
        }
 
        if ( !(flags & wxODCB_PAINTING_CONTROL) )
        {
 
            dc.DrawText(GetString( item ),
                        r.x + 3,
                        (r.y + 0) + ( (r.height/2) - dc.GetCharHeight() )/2
                       );
        }
    }
};
 
 


et pour la création du composent:

Code wxWidgets:

 
wxArrayString fonts;
        fonts.Add("Arial");
        fonts.Add("Arial Black");
        fonts.Add("Bookman Old Style");
        fonts.Add("Comic Sans MS");
wxOwnerDrawnComboBox* odc;
        odc = new wxFontStyleComboBox();
        odc->Create(sizer_panel,wxID_ANY,wxEmptyString,
                wxDefaultPosition, wxDefaultSize,
                fonts,
                wxCB_READONLY
               );
 


Voila, j'espère que ça aidera plus d'un.

Jonathan
----------
Bonjour à tous,

Il me reste cependant un problème à résoudre. Lorsque je sélectionne une ligne, le composant ne montre pas l’élément sélectionné. Il montre l'élément seulement les éléments contenu dans les dc.DrawLine.

Est-ce que quelqu'un sait comment faire en sorte que ce soit le texte qui soit sélectionné?

Jonathan

Dernière modification par starmate (29-06-2011 17:41:45)

29-06-2011 18:19:13  Re: Changer de polices pour wxComboBox #4
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
starmate a écrit:
Lorsque je sélectionne une ligne, le composant ne montre pas l’élément sélectionné. Il montre l'élément seulement les éléments contenu dans les dc.DrawLine.
J'avoue ne pas très bien comprendre le problème : peut-être qu'avec une capture d'écran...

En tout cas, j'ai essayé de bricoler l'exemple wxWidgets pour que le code soit similaire au tien, et ça a l'air de fonctionner.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-06-2011 18:35:22  Re: Changer de polices pour wxComboBox #5
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Merci pour ce retour.
En fait le problème est que quelque soit la valeur que je sélectionne, je ne peux jamais l'avoir affiché comme valeur par défaut du composant.
http://img803.imageshack.us/img803/8336/problemh.png
Sur cette capture:
    - à gauche, ce que je sélectionne
    - à droite, ce que j’obtiens après sélection. Je ne peux pas voir ce que je viens de sélectionner
29-06-2011 18:47:15  Re: Changer de polices pour wxComboBox #6
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
C'est bizarre : de mon côté j'ai fait un copier/coller de ton code pour le mettre dans la méthode "OnDrawItem" de l'exemple wxWidgets, et ça marche sans problème.

J'essayerais ce soir de pousser un peu plus loin les recherches.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-06-2011 19:37:09  Re: Changer de polices pour wxComboBox #7
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Effectivement vraiment étrange.
Toi lorsque tu sélectionne une ligne, celle-ci s'affiche t'elle bien dans le champs select?
De mon coté ça marche lorsque je supprime wxCB_READONLY, je n'ai plus de problèmes d'affichage, mais le problème est que l'utilisateur peut insérer le texte qu'il veut... :s

En tout cas, merci encore pour ton aide/test.

Jonathan
29-06-2011 20:42:59  Re: Changer de polices pour wxComboBox #8
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Le problème vient bien de là.
Si j'applique le style "wxCB_READONLY", ça fait la même chose que toi.

La solution est d'appliquer également le style "wxODCB_STD_CONTROL_PAINT"

Le code d'utilisation deviendrait donc :

Code wxWidgets:

wxOwnerDrawnComboBox* odc;
        odc = new wxFontStyleComboBox();
        odc->Create(sizer_panel,wxID_ANY,wxEmptyString,
                wxDefaultPosition, wxDefaultSize,
                fonts,
                wxCB_READONLY|wxODCB_STD_CONTROL_PAINT
               );


@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-06-2011 20:55:13  Re: Changer de polices pour wxComboBox #9
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Grand merci à toi Xav'!
Bon j'avoue que je ne pige pas encore tout mais ça va venir je pense (enfin j'espère ;)).
Je viens tout juste de commencer sous wxWidgets... et j'adore!

Merci encore!

Jon
29-06-2011 21:00:34  Re: Changer de polices pour wxComboBox #10
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
starmate a écrit:
Bon j'avoue que je ne pige pas encore tout mais ça va venir je pense (enfin j'espère ;)).
On est là pour t'aider, ne l'oublie pas...
Mais je dirais que tu n'as pas de soucis à te faire : attaquer à apprendre l'utilisation d'un framework en créant son propre contrôle "owner drawn", c'est déjà placer la barre un peu haut.
Alors si en plus tu y arrives, ...

starmate a écrit:
Je viens tout juste de commencer sous wxWidgets... et j'adore!
Bonne nouvelle.
Il y a pas mal de monde que wxWidgets rebute au départ.
Pourtant, dès qu'on en a compris le fonctionnement, c'est très facile à utiliser (et très puissant).

@+ sur wxDev
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
29-06-2011 21:59:45  Re: Changer de polices pour wxComboBox #11
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Pour être honnête et sans jouer les modestes, j'ai pas beaucoup de mérites et heureusement que tu étais là (j'avais même commencé à décortiquer le code derrière wxOwnerDrawnComboBox). J'ai utilisé un bout de code trouvé dans le wiki du site wxWidgets et je l'ai modifié pour inclure les polices de caractères.
Par contre, là où j'ai eu pas mal de difficultés, c'est lorsque j'ai voulu avoir des environnements de dev similaires sous Mac et PC en utilisant netbeans, mais dans les deux cas j'ai eu tellement de problèmes avec gcc et autre que j'ai préféré utiliser VC9... et pour compiler sous mac ce sera certainement xcode mais on verra ça plus tard... ;)
Bref, en tout cas, je ne laisse pas tomber wxWidgets, à moins que le projet soit abandonné. J'ai eu cette impression, peut être à tort, car les versions 2.9.x ont du mal à se transformer en version stable (après je ne connais pas trop la taille de la communauté).
D'ailleurs, aurais-tu as des infos la dessus?

Jon
30-06-2011 08:23:05  Re: Changer de polices pour wxComboBox #12
Xaviou (Administrateur)
Lieu: Annecy (74)
Inscrit le : 27-08-2007
Messages: 1367
Snippets: 25
Tutoriels: 6
Site web
Hors ligne
Pour être franc, je ne connais pas du tout NetBeans.
Si je trouve un moment, je le testerais, pour voir.

En tout cas, j'utilise gcc depuis pas mal de temps, que ce soit sous Code::Blocks ou en ligne de commande (surtout pour compiler les libs), et je peux t'affirmer que tout marche à merveille.

En ce qui concerne le projet wxWidgets, il est loin d'être abandonné.
Par contre, tu as raison : la version 3.0 devait à l'origine sortir au printemps 2011, mais la version 2.9.2 n'est pas encore là.

Mais si on regarde les logs svn, il y a toujours de l'activité : il ne nous reste donc qu'à attendre patiemment.

@+
Xav'

Le nouveau portail wxWidgets francophone : www.wxdev.fr
Ben en fait, vous y êtes déjà...
03-07-2011 20:13:32  Re: Changer de polices pour wxComboBox #13
starmate (Membre)
Inscrit le : 28-06-2011
Messages: 23
Snippets: 1
Tutoriels: 0
Hors ligne
Je trouve Netbeans vraiment pas mal (question de goût)... Pour développer, j'ai besoin d'un IDE, car je suis assez paresseux (complétion de code, couleurs, etc.). J'ai essayé Eclipse, mais j'avoue ne pas trop aimer. Avec Visual Studio, ça peut aller... mais bon, il n'y a pas de visual studio sous Mac et comme je travail par mal sur Mac et PC, avoir le même environnement de dev est vraiment pas mal je trouve. Bref, question de goût ;)...

Avec Gcc, en ligne de commande, je n'ai pas le moindre problème, mais avec Netbeans, ce n'est pas la même histoire... bon j'ai du louper quelque chose... Je reviendrai sur ce problème plus tard...

En tout cas c'est encourageant de voir que wxWidgets est un projet actif! :) Je réussi à faire ce que je veux et c'est vraiment super. Le seul problème que je rencontre concerne la compilation de wxWebkit sous windows, avec wxWidgets 2.9.2, du coup j'utilise wxWebConnect, qui utilise gecko, mais ça ne fonctionne pas sous Mac. Pour le moment c'est n'est pas bien grave, mais dans le futur, ça risque de me poser pas mal de problèmes.

Si quelqu'un à trouvé une solution pour compiler wxWebkit, avec wxWidgets 2.9.2 C++, sous windows, je suis fortement intéressé.

Si je trouve un solution avant, je préparerai un tuto :)

A bientôt et merci encore pour tout Xav'

Jon
Menu forum (navigation):
Pages: 1  
 
Accueil » Accueil forums » Développement C/C++
» Changer de polices pour wxComboBox