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 :

[Delphi XE7] Bug après un drag and drop


Sujet :

Delphi

Vue hybride

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

    Informations forums :
    Inscription : Juillet 2010
    Messages : 27
    Par défaut [Delphi XE7] Bug après un drag and drop
    bonjour à tous,

    je viens de découvrir un bug sur le drag and drop de delphi XE7 (FMX).
    Sur ma form j'ai des Tbutton, des Tlabel (avec hitTest à true) et un Tlistebox. Lorsque je fais un drag and drop interne à la listeBox tous les composants de la form perdent l'effet "over" (exemple flagrant sur les Tbutton).
    Cependant les click du bouton se déclenchent quand même.

    MAIS à contrario, j'ai des Tlabel, qui ont un hittest à true avec un event mouseEnter et mouseLeave (changement de fontColor) et une methode click, qui ne se declenche pas.

    je suis obligé de faire un click sur la form pour récuperer mes click sur mes label et tous mes mouseleave et mouseEnter.
    Cela donne l'impression qu'il y a comme un layout qui vient se mettre sur la form .

    j'ai isolé la fonction de drag d'un item sur le mouseMove d'un item comme suit:



    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
    if (aItem.isMouseDown) and not(aItem.isDragging) then
          begin
     
     
            Screenshot := aItem.MakeScreenshot;
     
            try
              aItem.isDragging := True;
     
              myListBox.AniCalculations.MouseLeave;
              myListBox.Root.BeginInternalDrag(aItem, Screenshot);
     
     
            finally
              Screenshot.Free;
            end;
     
          end;
    Cela dans le but de pouvoir faire un draganddrop dans la listBox sans avoir à selectionner au préalable l'item qui doit subir le drag (economie d'un click )

    Dans le "onDragandDrop" de "myListBox" j'ai fait plusieurs tentatives:

    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
    TCustomItem(Data.Source).isMouseDown := False;
            TCustomItem(Data.Source).isDragging := False;
            TCustomItem(Data.Source).DragEnd;
            TCustomItem(Data.Source).DragLeave;
     
            myListBox.AniCalculations.MouseDown(Point.X, Point.Y);
     
            myListBox.DragEnd;
            myListBox.DragLeave;
     
            Application.MainForm.ReleaseCapture;
            Application.MainForm.MouseLeave;
            Application.MainForm.MouseCapture;
            Application.MainForm.Activate;
            Application.MainForm.DragLeave;
     
    //        if TPlatformServices.Current.SupportsPlatformService(IFMXDragDropService, DDService) then
    //          DDService._Release;
    mais en vain .

    J'ai aussi mis des traces sur des évènements de la form tel que:
    - onFocusChanged
    - onDeactivate
    - onActivate

    Mais aucun des ces derniers n'est déclenché.
    et là je ne sais plus quoi faire.

    J'ai tout de même testé avec la version light de delphi berlin et le bug semble être fixé mais je n'ai pas accès aux unités pour comparer.

    Merci à tous.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2010
    Messages : 27
    Par défaut
    en fait il manquait juste un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    //rend la main sur la form !!!
            myListBox.Root.Captured := nil;

    que j'appelle sur l'évènement ondragandDrop de myListBox

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/05/2010, 20h42
  2. Sauvegarde des positions après un Drag and Drop
    Par enok37 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/07/2007, 10h26
  3. [Delphi 7] TStringGrid >> Drag and Drop
    Par Guillaume H dans le forum Delphi
    Réponses: 1
    Dernier message: 09/02/2007, 13h20
  4. Drag and Drop inter process entre delphi et une appli. ext.
    Par protheus dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 03/06/2005, 22h36

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