Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
prog:lazarus:cas:draganddrop [28/07/2024 16:12]
thierry [Afficher une image lors d'un Drag & Drop]
prog:lazarus:cas:draganddrop [19/08/2024 15:35] (Version actuelle)
thierry [Résumé]
Ligne 29: Ligne 29:
   end;   end;
 </​code>​ </​code>​
-**Implémentation ​de la classe :**+**Proposition d'​implémentation ​de la classe :**
  
 <code delphi> <code delphi>
Ligne 52: Ligne 52:
     vBitmap.Width := AControl.Width;​     vBitmap.Width := AControl.Width;​
     vBitmap.Height := AControl.Height;​     vBitmap.Height := AControl.Height;​
-    if AControl is TWinControl then+    if (AControl is TWinControl) and (csReplicatable in AControl.ControlStyle) ​then //​csReplicatable signifie que la methode PaintTo est implementée
       TWinControl(AControl).PaintTo(vBitmap.Canvas,​ 0, 0);       TWinControl(AControl).PaintTo(vBitmap.Canvas,​ 0, 0);
     FDragImages.Width := vBitmap.Width;​     FDragImages.Width := vBitmap.Width;​
     FDragImages.Height := vBitmap.Height;​     FDragImages.Height := vBitmap.Height;​
     FDragImages.Add(vBitmap,​ nil);     FDragImages.Add(vBitmap,​ nil);
-    FDragImages.DragHotspot := Classes.Point(vBitmap.Width div 2, vBitmap.Height div 2);+    FDragImages.DragHotspot := Mouse.CursorPos - AControl.ClientOrigin// Positionne le DragHotSpot a l'​endroit ou a été saisie le Control ​
   finally   finally
     vBitmap.Free;​     vBitmap.Free;​
Ligne 71: Ligne 71:
 ==== 2. Implémenter la méthode `PaintTo` dans le contrôle ==== ==== 2. Implémenter la méthode `PaintTo` dans le contrôle ====
 Le contrôle à partir duquel l'​image sera dessinée doit implémenter la méthode ''​PaintTo''​. Le contrôle à partir duquel l'​image sera dessinée doit implémenter la méthode ''​PaintTo''​.
 +
 +Si la méthode ''​PaintTo''​ fonctionne pour un Control, le Control doit avoir le membre ''​[csReplicatable]''​ dans son ''​ControleStyle'',​ voir [[prog:​lazarus:​classes:​tcontrols:​tcontrolstyletype#​csreplicatable]]
  
 <code delphi> <code delphi>
Ligne 82: Ligne 84:
 end; end;
  
 +{ Si la methode PaintTo est implementée,​ il est bon de definir ControleStyle+[csReplicatable] }
 procedure TTICTileControl.PaintTo(DC:​ HDC; X, Y: Integer); procedure TTICTileControl.PaintTo(DC:​ HDC; X, Y: Integer);
 var var
Ligne 99: Ligne 102:
 ==== 3. Créer et initialiser le `TDragObject` dans l'​événement `OnStartDrag` ==== ==== 3. Créer et initialiser le `TDragObject` dans l'​événement `OnStartDrag` ====
  
-Lorsque le drag and drop commence, vous devez créer et initialiser votre ''​TTileDragObject''​.+Lorsque le drag and drop commence, vous devez créer et initialiser votre ''​TDragObject''​.
  
 <code delphi> <code delphi>
Ligne 112: Ligne 115:
 end; end;
 </​code>​ </​code>​
-==== Conclusion ​==== +==== Résumé ​====
- +
-En utilisant cette approche, vous créez un objet de type ''​TTileDragObject''​ qui contient un '​TDragImageList''​ pour gérer l'​affichage de l'​image lors du drag and drop. L'​image est dessinée à partir du contrôle source grâce à la méthode ''​PaintTo''​. Cette méthode permet de dessiner le contrôle dans un bitmap, qui est ensuite utilisé pour afficher l'​image lors du drag.+
  
-Cette méthode est particulièrement utile lorsque ​vous voulez fournir une visualisation visuelle immédiate et claire ​de ce qui est en cours de déplacementce qui peut améliorer ​l'expérience utilisateur ​lors du drag and drop+En utilisant cette approche, ​vous créez un objet de type ''​TDragObject'' ​qui contient un ''​TDragImageList''​ pour gérer l'​affichage de l'​image lors du drag and drop. L'​image ​est dessinée à partir du contrôle source grâce à la méthode ''​PaintTo''​. Cette méthode permet ​de dessiner le contrôle dans un bitmap, qui est ensuite utilisé pour afficher ​l'image lors du drag. 
 +====== Source & Ressources ======