je vous demande un programme qui déplace un composant tshape pendant l'éxecution d'une application delphi:cry:
Version imprimable
je vous demande un programme qui déplace un composant tshape pendant l'éxecution d'une application delphi:cry:
Bonjour et bienvenue sur Developpez.com :D
A ma connaissance il n'y a rien d'automatique pour cela.
Et de manière classique pour déplacer un éléments il faut:
- capturer les coord de la souris sur le conteneur de ta shape et/ou sur ta shape
- implémenter les évènement OnMouseDown/Move/Up pour détecter le déplacement
- stocker, les coord de départ de la souris sur le OnMouseDown
- changer les coord. du Shape sur le OnMouseMove ou OnMouseUp (selon perf. souhaitée et visuel souhaité)
bon code !
j'ai essayé ça avec les evenement ONmousedown /onmousemove/onmouseup
mais le problème qui se pose c'est que le glissement ne s'arrètte pas malgrés
que j'ai utilisé une variable boolean pour l'arréter voila le code:
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 procedure TForm1.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin selected:=true; end; procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); begin if selected then begin shape1.top:=y; shape1.left:=x; end; end; procedure TForm1.FormCreate(Sender: TObject); begin selected:=false; end; procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin selected:=false; end;
En fait il faut faire attention aux différents type de coord relative à l'écran, à la form, à la shape.
Un exemple qui fonctionne:
A ceci pres que j'ai pas géré la position relative de la souris dans la shape... (la souris revient systèmatiquement dans le coin haut gauche de la shape, mais c'est pour le principe)Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 procedure TFMain.Shape1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin b := True; end; procedure TFMain.Shape1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer); begin b := false; end; procedure TFMain.Shape1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var n: TPoint; begin if b then begin n := Shape1.ClientToScreen( Point( X, Y ) ); n := Self.ScreenToClient( n ); Shape1.Left := n.X; Shape1.Top := n.y; end; end;
C joint un petit bout de code que j'ai fait pour le déplacement avec différentes sources récupérées sur le forum en utilisant la fonction superbe qui est rechercher
Sinon dans les sources, il y a encore les commentaires sur les composants shape (des tests que j'avasi fait)
Necessite la JVCL