Bonjour,

je cherche une méthode pour pouvoir déplacer et retailler des composants (Edits, combobox, images, checkbox, ...) dynamiquement à l'exécution.

pour l'instant, j'utilise l'évenement OnMouseDown des composants, et j'envoie un message SC_DRAGMOVE ou SC_Size, selon ce que je veux faire :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 (sender as tcontrol).perform(WM_SysCommand, SC_DragMove, 0);
pour le déplacement
et
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 (sender as tcontrol).perform(WM_SysCommand, SC_Size or 8,0);
pour le retaillage.

Ca fonctionne a peu près bien, mais ça ne marche pas pour les ComboBox ( la combo s'ouvre)
Ca ne fonctionne pas non plus pour les Timages (je dois déplacer le composant conteneur de l'image -un TPanel en l'occurence- pour que ca marche :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 (sender as TImage).Parent.Perform(WM_SysCommand, SC_DragMove, 0);
Ca ne fonctionne pas non plus, évidemment, pour les composants qui n'implémentent pas de gestionnaire pour l'evenement OnMouseDown ( en gros pour les compos ne descendant pas de TWinControl)

Un autre problème est que ca ne marche que pour les composants pris individuellement. je ne peux pas sélectionner plusieurs composants et les déplacer simultanément avec cette méthode.


Note : SC_Size est définie dans Windows.pas. Par contre SC_DragMove n'est pas définie dans Windows.pas . Il faut rajouter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 const SC_DragMove = $F012;  // 61458 en décimal
au code


Je sais qu'il existe des composants pour faire cela très simplement ... mais
je n'arrive pas à mettre la main dessus
Si quelqu'un pouvait me renseigner à ce sujet...

merci d'avance


PS j'utilise Delphi6 Pro + JVCL 3 + Firebird 1.5