Prévisualisation du DragDrop

Résolu
Denokan Messages postés 7 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 28 avril 2006 - 28 avril 2006 à 09:36
Denokan Messages postés 7 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 28 avril 2006 - 28 avril 2006 à 15:45
Bonjour à tous (et surtout à toutes )

je cherche à faire glisser mes composants (ça peut être des TEdit comme des TButton) sur ma fiche à l'éxécution pour que l'utilisateur puisse personnaliser son environnement... j'arrive relativement bien à les déplacer (DragMode à dmAutomatic et affectation de Left, Top et Parent dans le DragDrop)

par contre j'aimerai afficher à l'écran un rectangle tout simple de la taille du composant DragDropé pour prévisualiser l'espace qui sera occupé par mon composant, exactement comme le fait le concepteur de fiches de delphi. j'ai eu l'idée d'aller fouiller dans la source de TControl, mais même si j'ai compris la méthode générale pour afficher ce rectangle, j'ai plusieurs bugs. aussi je me demande si :
- est-il possible de réutiliser les méthodes de borland (à travers BeginDrag et EndDrag ?)
- quelqu'un a déjà fait ça et me fait passer son source

merci
Soyeux heureux, soyeux programmeur =)

10 réponses

florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
28 avril 2006 à 15:16
Ca y est, tu peux retourner voir ma source : ICI.
Je pense que ça devrait pas mal t'interesser. En tout cas, c'est déjà un bon appui pour réaliser ton effet, il me semble.

++

Si tu ne te plantes pas ......
tu ne pousseras jamais
3
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
28 avril 2006 à 11:19
Jettes un coup d'oeil ici: DRAG AND DROP AVEC IMAGE QUI SUIT LE CURSEUR.
Je ne sais pas si c'est réellement ce que tu cherches mais c'est déjà un bon début.
En plus, c'est abondament commenté.

++

Si tu ne te plantes pas ......
tu ne pousseras jamais
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 avril 2006 à 11:41
Salut,
si c'est juste pour pouvoir déplacer les composants en mode runtime alors c'est encore plus simple :

tu écris ce qui suit dans l'évènement OnMouseMove de la form (par Exemple)
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If Sender Is TControl Then
  Begin
  ReleaseCapture;
  TControl(Sender).Perform (WM_SYSCOMMAND, SC_MOVE or HTCAPTION, 0);
  End;
end;

et en suite par l'inspecteur d'objet tu mets dans l'évènement OnMouseMove, de tous les composants qui doivent être déplacés, FormMouseMove.

et c'est tout et comme par magie tu peux déplacer les boutons les edits les mémos les stringgrids etc... juste en cliquant dessus et en déplacant la souris.

<hr> n'oubliez pas de cliquer sur Réponse Acceptée
si elle vous convient

<hr>@+
Cirec
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
28 avril 2006 à 12:06
Oui cirec tu as raison.
Mais ce que désire Denokan, c'est pouvoir prévsualiser son drap drop.
C'est à dire de voir où le composant va arriver avant qu'il relache le bouton de la souris.
Car, avec ta méthode, tu ne peux pas changer le parent du control ni vérifier que le control qui va le recevoir est "d'accord".

Ou alors, comme c'est souventle cas ces derniers temps, je suis à côté de la plaque

++

Si tu ne te plantes pas ......
tu ne pousseras jamais
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 avril 2006 à 12:51
il parlait de visualiser les composants lors du déplacement donc c'est un peut vaste.
Avec la méthode que je propose il peut déplacer ces composants sur toute la fiche et bien sur voir ou il va le déposer (je rappel que c'est le composant qui bouge et non un rectangle) mais que bien évidement avec cette méthode il ne peut pas changer de parent donc pas besoin d'accord.

En fait pour simplifier cette méthode reproduit le comportement des composant en design time (c'est à dire qu'on peut les déplacer à souhait mais si on veut changer le parent il faut faire un couper coller par Ex)

Ou alors, comme c'est souventle cas ces derniers temps, je suis à côté de la plaque

je ne pense pas que tu sois à côté de la plaque comme la question ne précisait pas le changement de parent donc ...

Mais il me semble qu'il y une source sur CS qui fait quelque chose de similaire.
je regarde si je la retrouve je te tiens au courant

@+
Cirec
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
28 avril 2006 à 12:57
Tiens je pense que cette source mettera tout le monde d'accord

Comment déplacer et/où redimenssionner les composants en RunTime par Mauricio

<hr> n'oubliez pas de cliquer sur Réponse Acceptée
si elle vous convient

<hr>@+
Cirec
0
Denokan Messages postés 7 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 28 avril 2006
28 avril 2006 à 13:06
j'ai déjà essayé cette méthode mais le problème c'est qu'elle dessine sur le canvas de la form, donc si j'ai un panel le canvas de ma form n'est pas visible... la méthode qui est utilisée par le concepteur récupère le Device Context de l'écran et dessine directement dessus. il y a peut-être moyen de récup l'écran sous forme de canvas ?
Soyeux heureux, soyeux programmeur =)
0
florenth Messages postés 1023 Date d'inscription dimanche 1 août 2004 Statut Membre Dernière intervention 17 août 2008 3
28 avril 2006 à 13:10
@ Denokan: dans ma source, tu peux directement dessine rsur l'écran.
Je vais faire une MAJ, car là, c'est vraique c'est plutot mal expliqué.
Je t'avertit dès que c'est fait.

++

Si tu ne te plantes pas ......
tu ne pousseras jamais
0
Denokan Messages postés 7 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 28 avril 2006
28 avril 2006 à 13:13
ok la réponse de Cirect est très intéressante, mais effectivement je vais avoir besoin de changer de parent... donc j'imagine que je dois passer par une méthode drag drop...
Soyeux heureux, soyeux programmeur =)
0
Denokan Messages postés 7 Date d'inscription jeudi 14 février 2002 Statut Membre Dernière intervention 28 avril 2006
28 avril 2006 à 15:45
merci beaucoup c'est exactement ce dont j'avais besoin :)

si j'ai bien compris dans la ligne Application.OnMessage := tu intercèpte les messages destinés au programme vers ton composant ? c nickel je v continuer à étudier ta source !!!
Soyeux heureux, soyeux programmeur =)
0
Rejoignez-nous