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 :

Comment faire un Drag&Drop sur un tableau


Sujet :

Composants VCL Delphi

  1. #1
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut Comment faire un Drag&Drop sur un tableau
    Bonjour,

    Je cherche à faire un drag&drop d'une ligne d'un dbGrid pour la copier sur un autre StringGrid.
    Le problème c'est que si je suis en DMautomatique, le click n'est pas pris en compte et je n'est donc pas de selection valide.
    j'ai essayé plusieur options mais sans succes. Le click droit quant à lui fonctionne mais l'application est prévue pour tourner avec un tactile.

    Si quelqu'un à une idée ou à déjà eu le problème.

    Merci par avance.

  2. #2
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    Toujours rien?

    Existe t-il peut-être un compo TDBGrid (même payant) pour faire du drag&drop?

  3. #3
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Tu devrais pouvoir t'en sortir en utilisant ce genre de 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
    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
     
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, Grids;
     
    type
      TForm1 = class(TForm)
        StringGrid1: TStringGrid;
        procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
          Shift: TShiftState; X, Y: Integer);
        procedure StringGrid1MouseMove(Sender: TObject; Shift: TShiftState; X,
          Y: Integer);
      private
        { Private declarations }
        mx, my: Integer;
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.StringGrid1MouseDown(Sender: TObject;
      Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      mx:= X;
      my:= Y;
    end;
     
    procedure TForm1.StringGrid1MouseMove(Sender: TObject; Shift: TShiftState;
      X, Y: Integer);
    begin
      if (ssLeft in Shift) and (not StringGrid1.Dragging) and
        ((Abs(X -mx) > 10) or (Abs(Y - my) > 10)) then
        StringGrid1.BeginDrag(true);
    end;
     
    end.
    Le principe est de n'appeler BeginDrag que lorsque l'utilisateur à bougé la souris de plus de n pixels (ici 10). Il faut bien sur que la propriété DragMode soit positionnée à dmManual.

  4. #4
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    Ca a l'air de fonctionner mais bizarement l'évenement OnMouseDown ne fonctionne pas!

  5. #5
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    En fait l'evenement à bien lieu mais il n'est effectif que sur le titre de la colone !!!

    Es-ce normale?

  6. #6
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Effectivement, j'ai fait mon exemple avec un TStringGrid qui ne pose pas de problème alors que le TDBGrid ne semble pas gérer totalement l'évènement OnMouseDown. Peut-être peux-tu te brancher sur un autre évènement (OnCellClick par exemple).

  7. #7
    Membre régulier
    Avatar de Stef.web
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2003
    Messages : 104
    Points : 87
    Points
    87
    Par défaut
    J'ai trouvé une solution, car OnCellClick ne fonctionne qu'au relachement du boutton.

    Merci pour ta solution Pierre, car en combinant les deux bout de code, ça marche.

    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
    procedure TMain.ListGridMouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    begin
      // Scan X/Y en permanance si il n'y a pas de click gauche.
      if not(ssLeft in Shift) then
      Begin
           mx:= X;
           my:= Y;
      End;
     
      // au click gauche, test le déplacement de la souris (début de drag)
      if (ssLeft in Shift) and (not ListGrid.Dragging) and
        ((Abs(X -mx) > 10) or (Abs(Y - my) > 10)) then
            ListGrid.BeginDrag(true);
    end;
    Merci .

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

Discussions similaires

  1. Comment faire du drag and drop dans un Listbox
    Par jca dans le forum Codes sources à télécharger
    Réponses: 0
    Dernier message: 08/02/2013, 20h54
  2. comment activer le drag and drop sur un mac?
    Par hammah dans le forum Apple
    Réponses: 3
    Dernier message: 25/11/2008, 18h30
  3. comment faire effet de survol CSS sur un tableau
    Par yodark dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 01/08/2007, 08h40
  4. Comment faire du Drag&Over et Drag&Drop sur un TTreeView ?
    Par steph_1 dans le forum Composants VCL
    Réponses: 1
    Dernier message: 16/11/2005, 17h51
  5. Comment faire un Drag&Drop vers Windows ?
    Par Lung dans le forum Composants VCL
    Réponses: 17
    Dernier message: 21/06/2004, 13h10

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