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 :

TListView et ScrollBar


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut TListView et ScrollBar
    Bonjour,
    Comment détecter si la ScrollBar notamment verticale a été activée ? J'ai essayé avec OnClick mais cela ne détecte que sur le LV lui-même.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 613
    Billets dans le blog
    65
    Par défaut
    Bonjour,
    Par activée vous voulez dire : "la scrollbar est utilisée via son curseur" ou simplement "la scrollbar est visible" ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 152
    Par défaut
    La Scrollbar est actionnée clic sur flèche haut ou clic flèche bas ou clic sur la barre de défilement,
    donc mouvement de la LV (hors clavier touches bas / haut).

  4. #4
    Membre Expert
    Avatar de Charly910
    Homme Profil pro
    Ingénieur TP
    Inscrit en
    Décembre 2006
    Messages
    2 512
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur TP
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 512
    Par défaut
    Bonjour,
    il me semble qu'il y a une propriété TopIndex ?

    Si oui, tu pourrais peut être tester si sa valeur a changé ?

    A+
    Charly

  5. #5
    Membre très actif
    Homme Profil pro
    libre
    Inscrit en
    Juin 2019
    Messages
    205
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : libre

    Informations forums :
    Inscription : Juin 2019
    Messages : 205
    Par défaut
    Vous pouvez essayer ce code pour détecter que le scrollbar vertical a été actionné .

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     unit Unit2;
     
    interface
     
    uses
      Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
      Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;
     
    type
      TForm2 = class(TForm)
        LV: TListView;
        procedure FormCreate(Sender: TObject);
      private
        FOldProc:TWndMethod;
        procedure NewWinProc(var Mag: TMessage);
      public
        { Déclarations publiques }
      end;
     
    var
      Form2: TForm2;
     
    implementation
     
    {$R *.dfm}
    procedure TForm2.NewWinProc(var Mag: TMessage);
    begin
        FOldProc(Mag);
        if (Mag.Msg = WM_VSCROLL) then  // scroll vertical
        begin
     
        end;
    end;
     
    procedure TForm2.FormCreate(Sender: TObject);
    begin
       FOldProc:=LV.WindowProc;
       LV.WindowProc:=NewWinProc;
    end;
     
    end.

  6. #6
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 613
    Billets dans le blog
    65
    Par défaut
    Bonjour,

    Je suis plus FMX que VCL aussi ai-je mis plus de temps à fournir une solution.

    Citation Envoyé par Charly910 Voir le message
    il me semble qu'il y a une propriété TopIndex ?
    tu veux parler de : TopItem.Index effectivement c'est une solution

    Je suis parti sur l'idée d'un Helper.
    Comme il n'était pas indiqué qu'il s'agissait de tester l'évènement j'ai plutôt écrit une simple fonction de test.
    Que finalement j'ai modifiée par la suite pour prendre en compte le scroll vertical comme le scroll horizontal.
    Seul bémol, l'obligation d'avaoir une variable globale (privée de préférence) de type TPoint

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    type
      TScrollMvt = (SB_HORZ,SB_VERT);
      TScrollbarMove = class Helper for TListView
         function Scrolled(var before : Tpoint; const bar : TScrollMvt) : boolean;
      End;
     
      TForm23 = class(TForm)
        ListView1: TListView;
        btnFill: TButton;
        btnTest: TButton;
        procedure btnFillClick(Sender: TObject);
        procedure btnTestClick(Sender: TObject);
      private
        { Déclarations privées }
        before : TPoint;
      public
        { Déclarations publiques }
      end;
     
    var
      Form23: TForm23;
     
    implementation
     
    {$R *.dfm}
     
     
    { TScrollbarMove }
    function TScrollbarMove.Scrolled(var before :Tpoint;const  bar : TScrollMvt) : boolean;
    var
      After : Integer;
    begin
       After := GetScrollPos(Handle, Ord(bar));
       if bar=TScrollMvt.SB_VERT then result:= After<>Before.y else  result:= After<>Before.x;
       if Result then
         if (bar=TScrollMvt.SB_VERT) then Before.y:=After else Before.x:=After;
    end;
     
     
    procedure TForm23.btnFillClick(Sender: TObject);
    var
      I: Integer;
    begin
    for I := 1 to 100 do
      with listview1.Items.Add do
        begin
          Caption:=Format('Item %d',[i]);
        end;
    before:=Tpoint.Zero;
    end;
     
    procedure TForm23.btnTestClick(Sender: TObject);   // test déplacement vertical
    begin
    if Listview1.Scrolled(before,SB_VERT) then
      showmessage('j''ai bougé, topitem.index = '+ListView1.TopItem.Index.tostring);
    end;
    Une autre solution (outre celle de wheel) serait d'intercepter (terme mieux choisi que redéclarer ?) la classe pour déclarer ce que l'on veut (voir cet article de Cary Jensen)

    type
    TListView = Class (VCL.ComControls.TListView)
    private
    ....
    public
    end

    le seul inconvénient, tous les TlistView de la forme seront interceptés

Discussions similaires

  1. TlistView avec ScrollBar
    Par tijani dans le forum Composants VCL
    Réponses: 2
    Dernier message: 22/12/2009, 23h31
  2. Réponses: 5
    Dernier message: 05/11/2008, 20h07
  3. ScrollBar sur TListView
    Par Xav++ dans le forum C++Builder
    Réponses: 1
    Dernier message: 19/11/2006, 09h10
  4. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  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