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

wxWidgets Discussion :

Problème avec les xwSizers


Sujet :

wxWidgets

  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut Problème avec les xwSizers
    Bonjour à tous,

    Je suis en train d'essayer quelques trucs avec wxWidgets pour voire c'que ça fait, si c'est facil etc... et là j'attaque les sizers, principalement le wxFlexGridSizer.

    J'ai fait une classe dérivée de wxPanel, et j'aimerai y insérer 4 boutons qui prennent la totalité de la place disponible.

    J'ai fait ç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
     
        wxFlexGridSizer* sizer = new wxFlexGridSizer(2, 2, 10, 10);
     
        wxButton* b1 = new wxButton(this, -1, "b1");
        wxButton* b2 = new wxButton(this, -1, "b2");
        wxButton* b3 = new wxButton(this, -1, "b3");
        wxButton* b4 = new wxButton(this, -1, "b4");
     
        sizer->Add(b1, wxEXPAND);
        sizer->Add(b2, wxEXPAND);
        sizer->Add(b3, wxEXPAND);
        sizer->Add(b4, wxEXPAND);
     
        SetSizer(sizer);
        SetAutoLayout(true); 
        Layout();
    Mais les 4 bouttons sont restés dans leur taille par défaut, groupé sur le coin supérieur gauche de mon panel, et bien espacé de 10 comme prévu dans la définition du sizer.

    Comment faire pour qu'ils s'agradissent pour prendre toute la place?

    Merci

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    Salut !!

    Il faut préciser les colonnes du flexgrid qui doivent être extensibles (et/ ou lignes), comme ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    wxFlexGridSizer* sizer = new wxFlexGridSizer(2,0,5,5);
    this->SetSizer(sizer);
     
    sizer->AddGrowableCol(0);    // colonne zéro peut s'aggrandir
    sizer->AddGrowableRow(0);   // ligne zéro peut s'aggrandir etc ...
     
    sizer->Fit(this) ;   // Adapte la taille de la fenêtre (ça marche pas mal :) )
    sizer->SetSizeHints(this);      // Interdit à la fenêtre d'être trop réduite
    Si je peux me permettre, tu devrais utiliser wxID_ANY plutôt que -1 en handle ...

    Si ça marche toujours pas, n'hésite pas à revenir

    A++

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Voilà, j'ai réussit à arriver à ça:



    Ici, il y a une fenetre (objet hérité de wxFrame), avec dedant un wxBookCtrl pour les onglet, et dans ma première page:

    Un wxPanel qui contient deux autres wxPanel.
    Chaque sous panneaux contient un wxStaticBoxSizer, avec dedant un mélange de wxGridSizer et wxFlexSizer(selon que je souhaite avoir des céllules de même taille ou bien ajustées à ce qu'elles contiennent).

    Maintenant la question est:
    Comment faire pour que les deux wxStaticSizer aient la même taille?

    J'ai essayé d'agrandir le panneau du dessous, mais son wxStaticBoxSizer ne grandit pas avec. Donc au final on en revient au même, comment faire pour qu'un sizer prenne la totalité de la place dispo du wxWindow auquel il appartient?

    Je vous remercie beaucoup

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    On a répondu en même temps Kaktus lol

    Je te remercie beaucoup, je test ça au plus vite

    Merci

    Aurélien
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    C'est parfait, ça fonctionne.

    par contre le int proportion c'est quoi? Un pourcentage?

    Merci
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Ha j'ai encore une question:

    Là j'ai fait en sorte que le premier panel prenne toute la place dispo.
    J'ai aussi indiqué les colonnes 1 et 3 comme growable (pour que sur la largeur, les champs s'élargissent et pas les label.

    Jusqu'ici tout vas bien.

    Maintenant, j'ai besoin que lorsque ça s'élargit en hauteur, les champs de texte restent dans leurs tailles par défaut en hauteur, mais qu'ils soient centrés dans leur céllule.

    Pour se faire, je connais le flag pour positionner en alignement vertical au centre, mais par contre les champs sont en wxEXPAND (pour qu'ils s'agrandissent en largeur), donc ils s'agrandissent aussi en hauteur.

    Bref, une cellule peut s'agrandir en hauteur et largeur, et mon composant dedant, je voudrais juste qu'il prenne toute la place en largeur, mais qu'il reste à sa hauteur par défaut.

    C'est possible ça?

    Merci

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    Cool )

    Non, je ne connais pas de moyen simple pour faire ce que tu demandes avec un flexgrid.

    Il y en a peut-être un tu me diras

    Un int proportion? Ou ça?



    Regarde aussi du côté du wxGridBagSizer, il s'agit d'un tableau qui peut se resizer, ça devrait se rapprocher de ce que tu demandes ...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 109
    Points : 121
    Points
    121
    Par défaut
    Ah j'avais pas vu le deuxième message ...

    pour ceci :
    Maintenant, j'ai besoin que lorsque ça s'élargit en hauteur, les champs de texte restent dans leurs tailles par défaut en hauteur, mais qu'ils soient centrés dans leur céllule.

    Tu dois faire un autre sizer dans ton sizer ... Je sais que j'ai très souvent un flexgrid en sizer principal et dedans un ou plusieurs flexgrid dans mes prog.

    Dans ton cas, tu as un flexgrid principal avec 1 colonne et 2 rangées (tes 2 staticboxsizer) et dans chaque staticboxsizer, tu peux créer un flexgridsizer.

    Comme ça quand tu resize ta fenêtre, tu vois que tout se réorganise, c'est assez sympa .

    essaie déjà sur un assemblage simple, tu prendras vite le coup... après c'est une question de wxALIGN comme tu le dis....

  9. #9
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Je te remercie beaucoup

    Là ces nazes m'ont foutu sur du xml/xslt, donc beaucoup moins exitant, mais j'essaye de faire quelque chose de beau ce soir devant la méthode cauet, ça va être trash lol

    Merci

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  10. #10
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Bon, y'es 1h40, j'arrête là lol.

    J'ai essayé de cumuler des sizers (flexgrid et flex), de faire un sizer parent qui représent 4 ligne et une colone avec 4 autres qui représentent chacun une ligne pour les ajouter un par un, j'ai fait l'inverse, j'suis revenur à avant.

    A chaque fois soit ça ne s'étirait nulle part, soit ça étirait en horizontal et en vertical.

    Tout ce que j'ai trouvé (et je pense que je vais en rester là), c'est faire un wxFlexGridSizer avec 7 lignes et 4 colones. Je remplit une ligne avec mes contrôles, puis une ligne de 4 spacer (j'ai vu la fonction addSTretchSpacer)) puis une de controles etc...

    Je sais pas si c'est correct mais en tout ça ça donne bien.

    Par contre je voudrais savoir, concernant les proportions, à chaque fois je met 0 ou 1, ça donne toujours le même...
    Ca sert à quoi la propriété proportion qu'on retrouve systématiquement? c'est du pourcentage? parceque par défaut c'est 1... et comme c'est un int, j'aurai plus pensé 100 ou 0... Donc c'est encore assez confut ça

    Voili voilou

    Merci beaucoup

    A bientôt
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

  11. #11
    Membre expérimenté
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 824
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 824
    Points : 1 544
    Points
    1 544
    Par défaut
    Erf ça y'es, encore un soucis...

    J'ai un staticBoxSizer qui contient un flexGridSizer de deux lignes.

    Lorsque je fais un flexSizer->Show(ligne2, false), la deuxième ligne disparait comme prévu, mais le staticBoxSizer garde sa taille... Et lorsque je redimensionne la fenêtre, ça se réorganise comme il faut.

    J'ai beau y mettre des Layout, rien y fait :'(
    "Heureusement qu'il y avait mon nez, sinon je l'aurais pris en pleine gueule" Walter Spanghero

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 13h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 10h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 17h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 16h44
  5. []Problème avec les formulaires Outlook
    Par davidinfo dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 10h59

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