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 :

wxListCtrl : garder en mémoire la position de la barre de défilement


Sujet :

wxWidgets

  1. #1
    Membre du Club Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 40
    Points
    40
    Par défaut wxListCtrl : garder en mémoire la position de la barre de défilement
    Bonjour :]

    J'ai une liste de composants électriques avec leurs caractéristiques qui sont affichés dans un tableau de type wxListCtrl. Lorsque la ligne est trop longue pour être affichée, une scrollbar apparaît. Jusqu'ici par de problème

    Lorsqu'on clique sur une colonne du tableau, les composants sont triés et affichés de nouveau dans le tableau. Par exemple si on clique sur la colonne "Longueur" du composant "cable", alors les cables sont triés par longueur du plus petit au plus grand, et lorsqu'on reclique sur la colonne, ils sont triés par longueur du plus grand au plus petit (un peu comme l'explorateur windows).

    Mon problème vient à ce moment là. Les composants sont certes bien triés, mais lorsque j'appelle la méthode Refresh() de la table pour les afficher, je me retrouve en début de ligne. Ce que je voudrais c'est sauvegarder la position à laquelle on a cliqué pour y revenir après avoir fait un Refresh().

    A partir de l'event, on peut récupérer la colonne mais il n'y a pas de méthode dans wxListCtrl pour faire en sorte que cette colonne soit visible.. et je ne vois pas comment sauvegarder la position de la scrollbar.

  2. #2
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Salut, yuukuari,

    A mon avis, il doit être possible de récupérer la position de la scrollbar depuis l'objet wxListCtrl (méthode "GetScrollPos" héritée de l'objet wxWindow), puis de la remettre à sa place par un appel à "SetScrollPos", tout simplement!

    Pour plus de détails, voir les références de l'objet wxWindow:http://docs.wxwidgets.org/stable/wx_....html#wxwindow

    A+,
    Bastien

  3. #3
    Membre du Club Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 40
    Points
    40
    Par défaut
    Merci beaucoup !

    C'est exactement la méthode que je cherchais, je sais pas pourquoi je l'ai pas vue >__< j'ai pourtant regardé les classes mères dont la classe wxWindow..
    J'ai pas dû la voir

    Encore merci


    EDIT:
    En fait non c'est pas suffisant la méthode SetScrollPos permet bien de positionner la scrollbar (à la fois l'orientation ET la position) mais la méthode GetScrollPos ne permet que de récupérer l'orientation de la scrollbar:
    "virtual int GetScrollPos(int orientation)
    Returns the built-in scrollbar position."

    J'ai bien trouvé une solution de rechange mais bon c'est pas top..
    Je récupère le numéro de la colonne sur laquelle on clique pour trier les éléments, puis après avoir "Refresh" le tableau avec les éléments triés, j'appelle la méthode ScrollList(width,height) de mon tableau. Elle permet de décaler la vue vers la droite de "width" pixels et vers le bas de "height" pixels.
    Cependant je n'arrive pas à récupérer la position exacte du clic.

    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
    //JC FT43 Méthodes appelées lorsque l'on clique sur une colonne 
       void MmiVerificationPanel::OnTableWiresLeftClick(wxListEvent& event) {
          //On récupère le nom de la colonne cliquée
          findAndSetColumnName(getSelectedView(), event.GetColumn(), WIRES_TABLE);
          //On classe la table en fonction du paramètre choisi
          if (getSelectedView() == ALL_PARAMETERS) SelectAllParams();
          if (getSelectedView() == SYNC_COMPL_PARAMETERS) SelectSynchroCompletionParams();
          if (getSelectedView() == VERIF_PARAMETERS) SelectVerificationParams();
     
          //On récupère la largeur de la table, puis on décale vers la droite
          int width=-this->m_rightBox->GetSize().GetWidth()+50;
          for (int i=0; i<=event.GetColumn(); i++) {
             width +=TableWires->GetColumnWidth(i);
          }
          TableWires->ScrollList(width,0);
    	}

  4. #4
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Citation Envoyé par yuukuari Voir le message
    En fait non c'est pas suffisant la méthode SetScrollPos permet bien de positionner la scrollbar (à la fois l'orientation ET la position) mais la méthode GetScrollPos ne permet que de récupérer l'orientation de la scrollbar:
    "virtual int GetScrollPos(int orientation)
    Returns the built-in scrollbar position."
    yuukuari, tu m'excusera, mais pour moi, "virtual int GetScrollPos(int orientation)" signifie que tu fournis à GetScrollPos "l'orientation" (si elle est verticale ou horizontale) de la scrollbar dont tu veux récupérer la position, et que la fonction te renvoie cette position (par le "int")! En clair: le paramètre "orientation" ne sert qu'à préciser à quelle scrollbar tu t'intéresses!

    Donc, as-tu quand même essayé avec GetScrollPos? Évidemment, si ça ne marche pas...

    A+
    Bastien

  5. #5
    Membre du Club Avatar de yuukuari
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 65
    Points : 40
    Points
    40
    Par défaut
    Désolé pour le retard de ma réponse, j'ai oublié de vérifier s'il y avait des retours :/
    Je vais tester ça et je te tiens au courant!

    EDIT: Ça marche bien, merci Ça m'apprendra à pas bien lire ..

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

Discussions similaires

  1. [List] Garder en mémoire la position d'un iterator
    Par Djobird dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/05/2009, 14h50
  2. Réponses: 10
    Dernier message: 04/11/2006, 12h03
  3. Réponses: 2
    Dernier message: 02/11/2006, 20h10
  4. definir la position de la barre de défilement au maximun vers le bas
    Par tdo1 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/09/2006, 22h26
  5. mémoriser la position de la barre de défilement
    Par seb nantes dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 24/08/2006, 20h54

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