2010-02-09 8 views
3

J'ai un contrôle d'arbre qui implémente le glisser-déposer. J'utilise un OnStartDrag() surchargé pour obtenir mon propre TDragObjectEx qui montre une image en faisant glisser. Cela fonctionne parfaitement dans le contrôle des arbres, mais dès que je quitte l'arbre, l'image disparaît. Le curseur reste cependant.Glisser/déposer de Delph/Builder avec l'image, l'image disparaît en quittant le contrôle

J'ai essayé d'implémenter OnDragOver, pour réinitialiser l'image mais cela ne semble pas fonctionner.

Des indices à ce sujet? J'utilise C++ builder 2010, mais Delphi ferait la même chose.

Mise à jour: Le paramètre csDisplayDragImage a été trouvé sur chaque contrôle dans les contrôles de formulaire et dans le formulaire lui-même résout ce problème. Existe-t-il un moyen automatisé de définir csDisplayDragImage dans un formulaire complet plutôt que de le définir manuellement dans Create pour chaque élément?

void __fastcall TForm1::FormCreate(TObject *Sender) 
{ 
    ControlStyle << csDisplayDragImage; 
    RMU->ControlStyle << csDisplayDragImage; 
    Button1->ControlStyle << csDisplayDragImage; 
} 

Répondre

4

Si je me souviens correcte, vous devez inclure le [csDisplayDragImage] dans le drapeau « ControlStyle » des contrôles dont vous souhaitez faire glisser des images à voir quand STH. est déplacé sur eux.

Mise à jour: le réglage "AlwaysShowDragImages" du DragObject entraîne l'affichage de l'image glisser sur tout le bureau.

+0

Corriger ... en tournant AlwaysShowDragImages à true fait le travail. –

0

Évidemment, chaque contrôle qui va afficher l'image de traînée doit avoir l'ensemble csDisplayDragImagecontrol style. Vous pouvez ajouter le drapeau à un contrôle et tous ses chilren avec une fonction simple:

void AddDisplayDragImageStyle(TControl* ctl) 
{ 
    ctl->ControlStyle << csDisplayDragImage; 
    TWinControl* win = dynamic_cast<TWinControl*>(ctl); 
    if (win) 
    for (int i = 0; i < win->ControlCount; ++i) 
     AddDisplayDragImageStyle(win->Controls[i]); 
} 

la conférence téléphonique de formulaire sur lui-même: AddDisplayDragImageStyle(this).

+0

Cela fonctionne, mais définir AlwaysShowDragImages sur true est beaucoup plus facile. Merci. –