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

 Delphi Discussion :

Drag and Drop dans un onglet PageControl


Sujet :

Delphi

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut Drag and Drop dans un onglet PageControl
    Salut les gars.

    Sur ma forme, j'ai un composant TPageControl avec 2 onglets.
    Dans l'onglet N°2, j'ai déposé une ListBox dans laquelle je voudrais venir déposer des noms de fichiers venant de l'explorateur.

    Problème :
    Quand la ListBox se trouve sur la forme, pas de souci, tout marche nickel.
    Quand la Listbox se trouve sur un onglet du PageControl, rien à faire, ça marche pas !

    Pourquoi ?

  2. #2
    Nouveau membre du Club
    Inscrit en
    Octobre 2011
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 33
    Points : 27
    Points
    27
    Par défaut
    Bon, je réponds à ma question moi-même en espérant aider les autres.

    La solution : Il faut modifier ListBox.WindowProc de manière à intercepter et gérer le message venant du système.

    Dans le OnCreate de la forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        OldLBWindowProc := ListBox.WindowProc; // OldLBWindowProc est une variable de type TWndMethod
        ListBox.WindowProc := NewLBWindowProc;
        DragAcceptFiles(ListBox.Handle, True);
    et la procedure NewLBWindowProc ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TForm1.NewLBWindowProc(var Message: TMessage);
    begin
      if Message.Msg = WM_DROPFILES then WMDROPFILES(Message); // Intercepte le message WM_DROPFILES
      OldLBWindowProc(Message); // On fait appel à l'ancien WindowProc de ListBox pour gérer les autres messages
    end;
    Il faut évidemment définir WMDROPFILES pour expliquer quoi faire avec l'objet 'Droppé'

    Ne pas oublier de restituer tout le bazar à la destruction de la forme (OnDestroy) : ListBox.WindowProc := OldLBWindowProc

    Bye.

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

Discussions similaires

  1. Drag And Drop dans une Grid
    Par amandinerenard dans le forum Windows Presentation Foundation
    Réponses: 4
    Dernier message: 13/05/2013, 17h41
  2. Drag and drop dans un input
    Par kriekbellevue dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 25/12/2006, 20h55
  3. [VB.net] Drag and drop dans une Treeview
    Par gégécap dans le forum Windows Forms
    Réponses: 2
    Dernier message: 19/10/2006, 10h05
  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
  5. Drag and drop dans un TTreeView
    Par BigBenQ dans le forum C++Builder
    Réponses: 3
    Dernier message: 07/10/2005, 14h57

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