Bonjour,
je cherche a faire un lien entre deux élément drag n drop, qui peuvent donc etre déplacé sur la form a la maniere de visio 2003 !
auriez vous une idée?
Bonjour,
je cherche a faire un lien entre deux élément drag n drop, qui peuvent donc etre déplacé sur la form a la maniere de visio 2003 !
auriez vous une idée?
salut
il te suffit de creer un element graphique
ayant comme propriete
un element de depart
un element d'arrivé
et de tracer une droite entre les deux elements
pour tracer ta droite il te suffit de connaitre le centre des elements
et de commencer la droite droite a la peripherie des elements
@+ Phil
l'élément graphique doit etre une image ou je dois utiliser un composant verctoriel ou quelque chose comme ça?
l'idée de relier les deux élements par leur centre est pas mal, c'est un truc tout simple du type "center" ou bien il faut calculer le centre ?
salut
il te faut creer un composant graphique un peu l'equivalent des tshape
quand au centre il faut bien evidement le calculer mais bon ca c'est a la porte de tous le monde de definir le centre d'un cercle ou d'un rectangle
@+ Phil
mais elle va se déformer, s'étirer pour suivre le mouvement de l'objet??
salut
oui vu qu'il va se recalculer au moindre changement
tu as creer un lien entre tes different element autant qu'il te serve a quelque chose
@+ Phil
bon alors en dur je vais trouver les coordonnées des centres des images en divisant les cotés par deux
par exemple les propriétés de l'image sont :
les coordonnées du centre sera
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 height := 900; width := 500;
je suis pas sur qu'il faut faire comme ça :s apres la shape1 a été créé ( c'est une droite simple ), mais va t on avoir quelque chose du genre point de gauche := centre image 1 et point de droite := centre image 2 ? ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 450 250
si tu as deja fait ça tu pourrais vite m'expliquer le code? ou meme si tu as un exemple tu me donne un lien et je jete un coup d'oeil ! merci beaucoup !
le problème est que cette tshape n'a pas l'air d'etre faite pour se positionner en diagonal, ou bien je me trompe! mais moi elle se positionne par rapport a la grille et elle n'a pas l'air de se déformer !!
si quelqu'un peut faire un projet tout simple pour voir le résultat ça serait pas mal merci . . .
Ce post devrait pouvoir te mettre sur une piste
Regarde mon dernier message
http://www.developpez.net/forums/vie...ight=rectangle
Bref, je suis certain que ça ve te donner des idées...
Bon dev
l'utilisation de canvas serait pas plus facile??
Essaies toujours... de toute façon, il faudra que tu gère le déplacement, réduction de ta fiche si tu gères ça sur un Canvas (sinon tes ligne vont s'effacer à chaque fois).
Au moins le PaintBox, qui est un bète Canvas, le gère pour moi et lance ta procédure de dessin au moment ad'hoc.
mais dans ton cas quand tu supprime un élément la ligne reste visible (celle acroché a lélément supprimé) c'est un peu bug, en fait il s'enleve lors du prochain déplacement, faudrait que t'essais de faire un deplacement de 1pixel pour l'enlever automatiquement, fin bref, va falloir tafer la !
salut
le probleme du canvas c'est pour pouvoir les manipuler apres les avoir pose
mais bon c'est toi qui voit
@+ Phil
mise en place d'un timer qui les retrace automatiquement, fin ça devient de pire en pire la lol
Le but de mon programme, c'était juste pour tester la validité d'une idée, pas pour en faire un tuto ou finaliser deci delà tout les détailsEnvoyé par avogadro
Donc c'est vrai que je ne me suis pas foulé non plus...
Allez une ch'tite mise à jour pour la forme (dans la deuxième unité) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 procedure TMyPanel.JvCaptionPanel1ButtonClick(Sender: TObject; Button: TJvCapBtnStyle); var i:Integer; AConnector:TConnector; begin if Button=capclose then begin if MainForm.ComponentCount>0 then for i:=0 to MainForm.ComponentCount-1 do if (MainForm.Components[i] is TConnector) then begin AConnector:=(MainForm.Components[i] as TConnector); if ((AConnector.FromPanel=Self) or (AConnector.ToPanel=Self)) then begin AConnector.Free; AConnector:=nil; end; end; visible:=False; end; //Code à rajouter : MainForm.PaintBox1.Repaint; //Fin du code à rajouter... end;
mais pourquoi lorsque j'active cette procedure il y a mon application qui plante?? c'est cencé éviter la perte de l'élément quand je vais trop vite !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.FormDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean); { Cette procédure permet d'éviter la "perte" du compo lors d'un mouvement très rapide de la souris } begin {(Sender AS Timage).Left := X - XsurLab; (Sender AS Timage).Top := Y - YsurLab;} end; ///a revoir, gro bug si active !
Parce que ton Sender, c'est ta fiche Form1 et non pas ton TImage Pardi !!!, c'est Source qu'il faut utiliser :Envoyé par avogadro
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 (Source AS Timage).Left := X - XsurLab; (Source AS Timage).Top := Y - YsurLab;
bon voila, il y a tout qui marche, pour tracer la ligne en fait j'utilise cette procedure:
elle fonctionne en cliquant sur un element a relier dans un popup menu, pour faire plus simple ça marche comme ça:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 procedure TireMoi(Image1,Image2: TImage); begin Image1.Visible := false; Image2.Visible := false; with Form1.Canvas do begin Pen.Color := clRed; Pen.Width := 3; MoveTo(Trunc(Image1.Left + Image1.Width/2),Trunc(Image1.Top + Image1.Height/2)); LineTo(Trunc(Image2.Left + Image2.Width/2),Trunc(Image2.Top + Image2.Height/2)); Refresh; end; Image1.Visible := true; Image2.Visible := true; end;
mais quand je fais le drag and drop je vais devoir supprimer juste le trait que je viens de tracer et le redessiner, et ça je ne sais pas comment faire...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 procedure TForm1.Routeur21Click(Sender: TObject); begin TireMoi(tab_image[0],tab_image[1]); end;
ps: le principe des image en visible true et false me permet de placer le trait en dessous de l'image, j'ai rien trouvé d'autre pour l'instant !
salut
a priorie tu redesinne sur le canvas de la form
donc il ne te reste plus qu'a annuler le dessin sur ce canvas
@+ Phil
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager