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.