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 VCL Delphi Discussion :

ScrollBar d'un TListBox


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut ScrollBar d'un TListBox
    Bonjour

    Je souhaiterais savoir comment puis-je récupérer l'événement d'un scrollbar lorsque qu'il est en déplacement pour un TListBox?

    J'ai un TListBox mis à jours périodiquement (toute les secondes). Lorsque je souhaite déplacer le scroll vertical, étant donné qu'il y'a la mise à jour périodique, je n'ai que 1 seconde. Lors de la mise à jour il remet le scrollbar à l'origine.

    J'ai bien essayé de mettre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List.ItemIndex := List.TopIndex
    me disant que lorsque je déplace la barre, le TopIndex changerais, mais que ça soit le cas ou pas, il faudrait effectuer le déplacement en moins de 1 seconde.

    Je pensais soit trouver une autre solution pour mettre à jour en "temps réel" la position, soit intercepter le déplacement de scrollbar pour pouvoir arrêter la mise a jour de la box durant le déplacement. exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if not List.Scrolling then MettreAJourList
    else List.ItemIndex := List.PositionScrollBar
    Merci

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    3 006
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 006
    Par défaut
    Le rafraichissement toutes les secondes est-il vraiment nécessaire ?
    Généralement quand j'ai besoin de rafraichir une liste je le fait toutes les 30 secondes environs.

    Je place un compteur qui affiche le nombre de seconde avant le prohain rafraichissement et je met un bouton à coté pour forcer le rafraichissement si on ne veux pas attendre les 30 secondes.

    Jamais personne ne s'en ai plaint.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Oui il est vrai que cela serait plus confortable, mais malheureusement mon application est couplée avec un Système industriel dont je scrute les états (toute les secondes environ) et je ne peut me permettre d'étendre ce délais. (je perdrais la cohérence entre mon application et le système).

    Donc il faut que je trouve une astuce me permettant de faire défiler mon scrolbar tout en assurant la mise a jour (sauf de l'élément scrollé évidemment, le temps de le scroller).

  4. #4
    Membre Expert
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 704
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 704
    Par défaut
    Peut-être une piste ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      with ListBox1 do
      begin
        ItemIndex := -1;
        SendMessage(Handle, LB_SETCARETINDEX, Items.Count - 1, 0);
      end;
    L'urgent est fait, l'impossible est en cours, pour les miracles prévoir un délai. :bug: ___ "http://club.developpez.com/regles/#LIII-A"Écrivez dans un français correct !!

    C++Builder 5 - Delphi 6#2 Entreprise - Delphi 2007 Entreprise - Delphi 2010 Architecte - Delphi XE Entreprise - Delphi XE7 Entreprise - Delphi 10 Entreprise - Delphi 10.4.2 Entreprise - Delphi 11.3 Entreprise - Visual studio 2022
    OpenGL 2.1 - Oracle 10g - Paradox - Interbase (XE) - PostgreSQL (15.7)

  5. #5
    Membre averti
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Ce message a été corrigé, en rouge les bêtises et en italique les remarques de la correction. en normal le message d'origine

    Citation Envoyé par Lung Voir le message
    Peut-être une piste ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      with ListBox1 do
      begin
        ItemIndex := -1;
        SendMessage(Handle, LB_SETCARETINDEX, Items.Count - 1, 0);
      end;
    Cela n'a pas l'air de lui plaire, il viole la mémoire à tout va. le Méchant.
    En fait c'est moi qui ai déconné, ça marche très bien par contre comme je le pense (cf plus loin) ca cale a la fin de la liste hors je souhaite maintenir la position courante. n'y a t-il pas un moyen de récupérer cette position sans que le click n'ai été relaché???

    Bon par contre j'aurais voulu comprendre le fonctionnement de ce que tu me proposais.

    On fixe l'index à -1 (valeur par défaut) c'est à dire on ne choisi aucun Item.
    Et on dit au ListBox (via son Handle) de positionner le Caret à Item.Count, mais cela ne devrait t'il pas me positionner à la fin de la liste? et non maintenir la position courante ENTRE le début et la fin comme je le veux?

    Merci en tout cas

  6. #6
    Membre averti
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    J'ai un problème supplémentaire, c'est que lorsque j'essaye d'utiliser la scrollbar (verticale), parfois la ScrollBar garde le focus (je suppose) car plus aucun contrôle ne fonctionne, même pas pour fermer la fenetre. Lorsque cela arrive, je doit cliquer d'abord sur les Items de la ListBox puis utiliser les contrôles que je souhaite.

    Et cela n'a peut être pas d'influence mais j'ai redéfini DrawItem de mon ListBox pour le personnaliser

  7. #7
    Membre averti
    Inscrit en
    Août 2009
    Messages
    41
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 41
    Par défaut
    Pas d'idée potentielle ou de piste pour la position du scrollbarre malgrès la mise a jours périodique de ma Frame? ni pour mon probleme de "focus" je suppose?

Discussions similaires

  1. [Lazarus] TListBox et scrollbar visible en permanence
    Par supercyprien dans le forum Lazarus
    Réponses: 4
    Dernier message: 11/02/2010, 18h41
  2. Scrollbar toujours visible dans un tlistbox
    Par tixu dans le forum Delphi
    Réponses: 1
    Dernier message: 10/10/2006, 09h35
  3. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  4. [VB6][Formulaire]Appliquer un Scrollbar a une Form
    Par Boil dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 09/11/2002, 03h51
  5. [visuel]ScrollBar et StatusBar
    Par psl dans le forum Composants VCL
    Réponses: 2
    Dernier message: 24/08/2002, 21h28

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