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 :

Scroll automatique d'une ListView


Sujet :

C++Builder

  1. #1
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut Scroll automatique d'une ListView
    Bonjour,

    Dans le cadre d'un projet, j'utilise une ListView (mode VsReport, MultiSelect à true) qui comportent x éléments.
    La manipulation consiste à faire un traitement sur chacun des items sélectionnés, et, selon l'état du traitement, je mets une icône de couleur (rouge, orange, vert selon les cas).
    Je sais qu'il est possible de faire un scroll automatique de ma ListView en utilisant la méthode Scroll de cette dernière, mais je n'arrive pas à "doser".
    Je ne sais pas comment faire pour dire "Voilà, l'item sélectionné, c'est le 28, je dois me positionner à cet endroit dans la ListView pour que je puisse voir l'item en cours de traitement)".

    Si quelqu'un sait comment faire, où si il a une tout autre méthode qui me permettrait de voir l'item que je traite, ça serait super

    Merci par avance,
    Ero-Sennin

  2. #2
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    En affectent l'item voulu a la propriété Selected il ne scroll pas directement ?

  3. #3
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Non ça ne marché pas directement ...

    En fait, j'ai fait un peu de calcul (ah les maths, toujours utile ).

    Je rappelle le but de la chose :
    J'ai une liste d'élément, et je souhaite que l'élément que je traite soit affiché en bas du ListView (ainsi, je peux voir l'état des éléments précédents).

    Je suis parti du fait que j'aurai toujours 21 lignes de visible dans la ListView et que la hauteur en pixel de chaque ligne est de 16 pixels.
    Sachant que je veux que mon ListView affiche toujours l'élément actif tout en bas du ListView, il faut calculer la position avec cet élément en tenant compte de l'élément précédent... Un peu de code vaut mieux qu'un long discours

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int y;
    int ElementCoruant;
    int ElementPrecedent;
    if(ElementCourant> 21)
    {
      if((ElementPrecedent< 21))
        y = (ElementCourant*16)-(ElementPrecedent*16)-((20-ElementPrecedent)*16);
      else
        y = (ElementCourant*16)-(ElementPrecedent*16);
      ListView1->Scroll(0,y);
    }
    Je rappelle, le 16 est une valeur trouvée afin qu'elle corresponde au mieux à la hauteur d'une ligne de la ListView... Ca aurait été bien de la trouver par code mais bon

  4. #4
    Membre expérimenté Avatar de 10_GOTO_10
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    887
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 887
    Points : 1 531
    Points
    1 531
    Par défaut
    ... Et en utilisant les propriétés TopItem et VisibleRowCount ?

  5. #5
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut 10_GOTO_10,

    Merci pour ton intervention .
    Il est vrai que tu m'enlèves une épine du pied avec la propriété VisibleRowCount, cependant, je ne vois pas comment faire avec TopItem.
    En effet, tu as mentionné dans une autre discussion, et de façon très juste, que TopItem n'est pas affectable

    Comment tu as résolu ton soucis avec ce fameux TopItem ?
    Ca m'intéresse

  6. #6
    Responsable Magazine

    Avatar de pottiez
    Homme Profil pro
    Développeur C++
    Inscrit en
    Novembre 2005
    Messages
    7 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2005
    Messages : 7 152
    Points : 22 087
    Points
    22 087
    Par défaut
    Je pense que l'intérêt de TopItem et de calculer le scroll à faire directement par rapport à la position actuelle du scroll plutôt que de calculer la distance actuelle par rapport au premier Item puis la distance pour redéscendre à l'Item voulu

  7. #7
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Bon, ba je crois que j'ai trouvé la solution sans que l'on code en dur les valeurs (taille d'un item, items visibles ...).
    Je vous mets la solution, ça pourra en aider plus d'un surement .
    Seul petit "soucis", c'est que la taille du ListView doit montrer un nombre x d'items au pixel près...
    Allez, voici le code :

    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
    // Taille d'un item en Y
    int hauteurItem= ListView1->Items->Item[1]->GetPosition().y - ListView1->Items->Item[0]->GetPosition().y;
    // Scroll à faire en pixel
    int y;
    // Items pour le calcul du scroll
    int ElementCourant;
    int ElementPrecedent;
     
    if(ElementCourant >= ListView1->VisibleRowCount)
    {
      if((ElementPrecedent <= ListView1->VisibleRowCount))
        y = (ElementCourant*hauteurItem)-(ElementPrecedent*hauteurItem)-((ListView1->VisibleRowCount-1-ElementPrecedent)*hauteurItem);
      else
        y = (ElementCourant*hauteurItem)-(ElementPrecedent*hauteurItem);
      ListView1->Scroll(0,y);
    }

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

Discussions similaires

  1. [MVVM] Défilement automatique dans une ListView
    Par em925 dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 31/05/2014, 02h14
  2. Scrolling automatique dans une Zone
    Par yack.ston dans le forum Qt
    Réponses: 1
    Dernier message: 17/01/2014, 20h31
  3. Focus automatique dans une listview lors d'un SelectedItems
    Par Chacha35 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 28/09/2009, 11h19
  4. Défiler automatiquement une ListView
    Par jose91 dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2007, 23h31
  5. [C#] [WinForms] Redimensionnement automatique d'une ListView
    Par Phenomenium dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/02/2005, 11h43

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