Je suis toujours perplexe devant la gestion de ma souris....
Je réalise, plus ou moins bien... le OnDragOver, pour déplacer mon image, et le OnDragDrop, pour créer une réaction au lâcher. Jusque là,tout va bien.
Cependant, même si les objets sur le panel en restent prisonnier, on peut très bien, par erreur, continuer déplacer la souris en restant cliqué, et sortir le curseur hors du panel. L'objet "draggé" lui, reste bien prisonnier du panel, mais en revanche, au lâcher, le curseur étant au-delà, c'est une autre histoire.
En effet, pour que le lâcher réagisse comme prévu, il doit se produire sur le panel ou une case recept.
Mais au-delà du panel, puisque le curseur cliqué peut quitté ce panel, il faudrait que le OnDopDrap soit effectif sur tous les objets de la fiche, afin de pouvoir réagir dans toutes les situations de lâcher, hors panel.
Cette solution fonctionnerait à mon sens, mais quel travail !!!
Affecter à tous les objets que je pose, le OnDragDrop, ça me parait peu élégant et très lourd et source d'oubli!
Pour palier au problème, j'ai essayé d'affecter une valeur fixe de coordonnées pour le MouseCursorPos, afin de bloquer le curseur, dès qu'il s'approche de la limite du panel, pour le forcer à rester à l'intérieur. C'est à dire que même si je continue à descendre la souris plus bas que le bas du panel, le MouseCursorPos serait forcé à une valeur fixe dans le bas du panel, mais Delphi n'est pas content, il me dit que cette valeur n'est pas affect able, ce qui parait logique....
1/ Comment travailler des déplacements sur souris sans risquer les aléas d'être hors zone de travail, sur un label ou un endroit de la fiche non utilisé, sans que le OnDragDrop au lâcher ne sache réagir??
2/ Au pire, peut-on affecter un OnDragDrop à tous ce qui est visible sur la fiche, en une commande, sans se lancer dans un recensement difficile et source d'erreur, puisque évolutif au fil du développement??
Merci à tous ceux qui ont eu le courage de lire jusqu'au bout, et surtout de comprendre mon interrogation...
Partager