DRAG&DROP DE CONTROLES

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 23 déc. 2005 à 12:20
cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 - 2 janv. 2006 à 14:50
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/35211-drag-drop-de-controles

cs_MAURICIO Messages postés 2106 Date d'inscription mardi 10 décembre 2002 Statut Modérateur Dernière intervention 15 décembre 2014 5
2 janv. 2006 à 14:50
Salut Icebird,
pourrais tu me filer mon compo que tu as adapté en y marquant les lignes ajoutées SVP?
Je verrais si elles sont cool tes modifs...
A+
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
2 janv. 2006 à 10:51
J'ai déjà été voir le TcyResizer, et j'ai mis un commentaire que j'invite tout le monde à lire.
Icebird Messages postés 10 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 27 décembre 2005
1 janv. 2006 à 05:36
"Question, y-a-t-il un moyen simple d'afficher les poignées de sélection permettant de montrer les composants sélectionnés (ou le composant sélectionné et le dimmensionner)"

Là tu cherche le composant de Mauricio, TcyResizer (voir premier commentaire). Je l'avoue, j'ai fini par l'adopter pour le programme sur lequel je bosse en ce moment, vu que je cherchais également à redimensionner les controles. Il fonctionne particuliérement bien et c'est franchement une idée originale qu'il a eut. Je l'ai juste modifié un peu pour inclure cette fameuse grille d'attachement auquel je tient tant.

Malgré tout, je pense que pour un simple draggage, ma méthode est plus simple.

Pour la distance avant draggage, oui c'est beaucoup mais ce n'est qu'un exemple, et cette valeur à pour but de faire bien ressentir le délai avant le début du draggage.

Ton idée d'antidérapant pour les ascenceurs est très intéressante, mais l'idéal serait de modifier le code des barres à sa source pour permettre une option de ce type au lieu de retaper un bout de code dans chaque programme en affichant. Et je ne pense pas que ce soit possible actuellement.

PS: concernant mon heure de postage de ce commentaire: oui, je rentre du reveillon, et non, je n'ai pas trop but puisqu'on n'a pas but du tout ^^
Bonne année!
assemple Messages postés 65 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 16 décembre 2011
31 déc. 2005 à 18:32
Moi ça m'a plus, car c'est un exemple de Drag and Drop que j'ai très vite adapté à mon besoin.
Je n'aurais pas su le faire sans ce modèle créé par IceBird, ou du moins aussi vite.
Question, y-a-t-il un moyen simple d'afficher les poignées de sélection permettant de montrer les composants sélectionnés (ou le composant sélectionné et le dimmensionner)
Concernant la remarque du saccadement en cas de grille, la solutionne d'IceBird et évidemment la bonne pour avoir la même chose que dans l'EDI de DELPHI ou des autres EDI visuels, mais finalement, s'il y a grille pourquoi pas de saccadement ?
Et puis d'abord les grilles c'est nul !

Autre chose, le "Distance parcourue par la souris avant que le draggage ne commence :" est un truc extra pour éviter les dérappages du composant lors d'une sélection par click trop empressé. Mais dans ton exemple il n'est utile qu'en tant exemple, puisqu'il n'y a pas de sélection a proprement parlé.
30 points c'est beaucoup, pourquoi tant ?
Sous delphi ce serait bien utile un antidérapant de 5 points.

Antidérapant c'est aussi un adjectif que j'avais attribué à un ascenseur amélioré :
Lorsque l'on déplace le "curseur" d'un ascenceur, surtout s'il est long, il est fréquent que la souris "quitte" l'ascenceur, provocant un retour brutal de celui-ci à sa position d'origine. Pour éviter cela, j'avais ajouté un "ClipCursor" à OnMouseDown et à OnMouseUp, interdisant à la souris de quitter l'ascenceur si le bouton de la souris est enfoncé.
Ca devrait être ainsi dans toutes les interfaces graphiques.

Salut à tous !
Joyeux Réveillon !
(ne buvez pas trop, et ne buvez pas du tout si vous conduisez)
Bonne Année
Icebird Messages postés 10 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 27 décembre 2005
26 déc. 2005 à 17:04
A propos, je viens de penser à cela: on peut avoir un glissement "doux" avec malgré tout un attachement à une grille: il suffit d'ignorer l'increment dans le OnDragOver, et de l'appliquer lors d'un OnDragDrop.
Icebird Messages postés 10 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 27 décembre 2005
26 déc. 2005 à 17:02
Delphiprog: bon, l'idée du DIV était une fausse bonne idée: D'abord, je cherche à obtenir un multiple d'Increment, donc une simple division ne suffit pas. A la limite, l'utilisation du DIV me permet juste de supprimer le Round. Ensuite, l'arrondissement vers le bas de DIV donne un rendu moins agréable qu'un arrondissement au plus proche. Donc je suis finalement revenu sur mon idée de départ.

Debiars: essaye a nouveau mon exemple, çà devrait plus te plaire.
Icebird Messages postés 10 Date d'inscription lundi 14 novembre 2005 Statut Membre Dernière intervention 27 décembre 2005
26 déc. 2005 à 16:25
Le déplacement saccadé est utile pour avoir une grille d'attache et aligner plus facilement les contrôles. Ca peut être particulièrement utile pour déplacer des pions sur une grille par exemple. Il suffit alors de mettre Increment égal à la largeur d'une case.

Pour le fait que le composant saute quand on commence le draggage, en effet çà peut être un peu pénible. J'ai amélioré cela en partie en enlevant la moitié de la largeur et hauteur du composant aux X et Y, de façon à prendre le composant par le milieu, mais ce n'est pas encore ultime.
L'idéal c'est de stocker les coordonnées de la souris par rapport au composant au début du dragage, et de soustraire ces coordonnées pendant le draggage. Ca devrait bien rendre.

DelphiProg: oui, c'est tout bête mais je n'y avait pas pensé. Je corrigerais.

Je vais mettre à jour ma source avec ces améliorations.
Debiars Messages postés 285 Date d'inscription lundi 16 juin 2003 Statut Membre Dernière intervention 11 février 2018
26 déc. 2005 à 15:24
Ta procédure est effectivement simple, mais...
au début, le déplacement saccadé m'a surpris, car j'essaye toujours d'avoir un glissement doux. Après j'ai compris que ça venait de l'incrément, En le mettant à 1, voir en le supprimant, ça s'arrange.
Ensuite, voilà le composant qui saute pour accrocher le coin supérieur gauche au curseur de la souris..., désagréable!, j'aime que le curseur reste sur le composant là où je l'ai posé.
Mais tout ça, c'est une question de goût... :-)
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
26 déc. 2005 à 15:07
Ne serait-il pas plus avantageux de remplacer division flottante + arrondi + multiplication :
Top := round((Parent as TControl).screentoclient(tempPoint).Y / Increment)* Increment;
par l'utilisation de l'opérateur div ?
Top := (Parent as TControl).screentoclient(tempPoint).Y DIV Increment;

Evidemment, même chose pour left à la ligne en-dessous.
Rejoignez-nous