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 :

Défilement ListView drag & drop


Sujet :

Composants VCL Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Par défaut Défilement ListView drag & drop
    Bonjour à tous
    Bon, ben tout est dans le titre :
    J'ai un listview qui affiche tout les items sur plusieurs colonnes.
    Lorsque je déplace un item, je ne peux pas faire défiler automatiquement les colonnes. Je suis obligé de poser l'item, scroller sur la droite ou la gauche, reprendre l'item et le redeplacer etc ... jusqu'à l'arrivée.

    Comment est ce que je peux activer le déplacement de ces colonnes lors d'un drag'n drop ?
    Si vous voulez le code que j'utilise pour le drag drop, dites le moi ...
    Merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Bonjour,

    J'imagines que pour ton Drag&Drop tu dois implémenter l'évènement OnDragOver de ton TListView ? Et à ce moment là tu as la position de la souris. A partir de là tu peux déterminer si ta souris entre en zone "à scroller" (que tu définit comme tu veux) et dès lors tu peux faire appel à la méthode Scroll de ta ListView.

    Eventuellement tu peux rajouter un timer pour éviter que ça ne scrolle trop vite, c'est à toi de voir.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Par défaut Toujours le scroll
    Citation Envoyé par Aka Guymelef Voir le message
    Bonjour,

    J'imagines que pour ton Drag&Drop tu dois implémenter l'évènement OnDragOver de ton TListView ? Et à ce moment là tu as la position de la souris. A partir de là tu peux déterminer si ta souris entre en zone "à scroller" (que tu définit comme tu veux) et dès lors tu peux faire appel à la méthode Scroll de ta ListView.

    Eventuellement tu peux rajouter un timer pour éviter que ça ne scrolle trop vite, c'est à toi de voir.
    salut à tous
    Bon ! apres avoir chercher en vain un code pour la zone à scroller, ainsi que cette méthode scroll du listview, auriez vous quelques indications de recherche à me donner
    Un mot à rechercher dans l'aide de delphi7 ou autre m'aiderait.
    merci de votre aide et merci à toi Aka Guymelef.

  4. #4
    Membre Expert

    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    1 519
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 519
    Billets dans le blog
    1
    Par défaut
    Et bien dans le OnDragOver du ListView on peut dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( X >= ListView1.Width - 20 ) then
       ListView1.Scroll( 0, 10 );
    Par exemple.

    Il faut s'imaginer la surface visible d'un ListView comme un carré et la position X et Y correspondent à l'abscisse et l'ordonnée du point de la souris dans ce carré. X=0 la souris est sur le bord gauche du rectangle, X=ListView1.Width la souris est sur le bord droit du rectangle.

    Donc ici si la souris s'approche du bord droit dans une marge de 20px alors je demande à la ListView de scroller de 10px vers le bas.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 21
    Par défaut Génial ! ça scroll ...
    Citation Envoyé par Aka Guymelef Voir le message
    Et bien dans le OnDragOver du ListView on peut dire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( X >= ListView1.Width - 20 ) then
       ListView1.Scroll( 0, 10 );
    Par exemple.

    Il faut s'imaginer la surface visible d'un ListView comme un carré et la position X et Y correspondent à l'abscisse et l'ordonnée du point de la souris dans ce carré. X=0 la souris est sur le bord gauche du rectangle, X=ListView1.Width la souris est sur le bord droit du rectangle.

    Donc ici si la souris s'approche du bord droit dans une marge de 20px alors je demande à la ListView de scroller de 10px vers le bas.
    salut
    Merci, c'est génial !
    J'ai rajouté deux timers :un pour le scroll vers la droite avec l'interval à 100 et enabled à false; un autre pour le scroll vers la gauche avec les même propriétés.
    Voici mon 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
    17
    18
    19
    procedure TFrmTest.ListView1DragOver(Sender, Source: TObject; X,
      Y: Integer; State: TDragState; var Accept: Boolean);
    begin
      Accept:=(Sender is TListView);
      if ( X >= ListView1.Width - 20 ) then timer1.Enabled := true;
      if ( X <= ListView1.left + 20 ) then timer2.Enabled := true;
    end;
     
    procedure TFrmTest.Timer1Timer(Sender: TObject);
    begin
    ListView1.Scroll( 50, 0 );
    timer1.Enabled:=false;
    end;
     
    procedure TFrmTest.Timer2Timer(Sender: TObject);
    begin
    ListView1.Scroll( -50, 0 );
    timer2.Enabled:=false;
    end;
    J'ai un autre souci sur mon listview lors du déplacement de l'item selectionné, j'ai des traces de l'item partout où je le déplace sur mon listview jusqu'à ce que je le 'pose'.
    J'ai bien tenté un refresh, mais comme je m'y attendais ça fait clignotter le listview. La propriété viewstyle de mon listview est en vslist.
    si je n'ai pas de solution à ce problème, ce n'est pas très grave; c'est surtout pour information; je n'avais pas ce genre de problème en vb2005.
    Encore une fois, merci !
    @ bientôt
    greg38bj

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

Discussions similaires

  1. [Débutant] Wpf listview drag and drop
    Par spunk62 dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 30/03/2012, 18h03
  2. [listview]drag and drop
    Par ludovic85 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 14/03/2007, 12h09
  3. [C++] ListView, Drag&Drop + ComboBox ?
    Par JulienDuSud dans le forum C++/CLI
    Réponses: 4
    Dernier message: 30/09/2006, 12h49
  4. [VB.NET]Drag and Drop dans une Listview
    Par gégécap dans le forum Windows Forms
    Réponses: 5
    Dernier message: 23/08/2006, 18h41

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