Comment déplacer un objet de type contrôle pendant l'exécution d'un programme en Delphi ?
par
, 17/03/2023 à 01h44 (950 Affichages)
Pour ce tutoriel, je vais vous montrer comment déplacer un objet de type contrôle pendant l'exécution d'un programme en Delphi. Le truc est très simple et n'importe quel développeur Delphi peut le faire.
Quels sont nos besoins ?
Nous devrions savoir comment nous voulons déplacer un contrôle. Nous avons plusieurs façons de déplacer un objet de contrôle. Nous pouvons utiliser les touches du clavier (Haut, Bas, Gauche ou Droite) ou nous pouvons également utiliser une souris. Il existe d'autres façons de déplacer un objet de contrôle, mais pour ce tutoriel, nous n'utiliserons qu'une seule méthode, le contrôle de la souris.
Étape 1 : Trois (03) actions pour déplacer un objet de contrôle
Il y a trois (03) actions pour déplacer un objet de contrôle :
- Maintenir enfoncé le bouton gauche de la souris
- Déplacer la souris (le curseur se déplace également sur l'écran)
- Relâcher le bouton gauche de la souris
- Par conséquent, nous devons utiliser trois (03) événements Delphi : OnMouseDown, OnMouseMove, OnMouseUp. Tous ces événements appartiennent à notre objet de contrôle (par exemple : TRectangle).
Étape 2 : Implémentation
Nous pouvons maintenant commencer notre programme. Pour cela, créez un nouveau projet FMX et placez un objet de contrôle (par exemple : TRectangle) sur un formulaire de programme.
Événement OnMouseDown
Nous allons implémenter notre premier code dans l'événement OnMouseDown. Pour cela, nous devons savoir comment nous pouvons le faire. Lorsque nous appuyons longuement sur le bouton gauche de la souris, nous devons enregistrer des informations sur notre position actuelle et notifier à notre programme que quelqu'un a appuyé sur le bouton gauche de la souris. Nous avons donc besoin de trois (03) variables :
- une variable pour indiquer l'état de notre bouton gauche (GMouseDown)
- deux (02) variables pour enregistrer les positions (X,Y) du curseur
PS : Les variables doivent être des variables globales.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 var Form2: TForm2; GMouseDown : Boolean = false; // Global variable GX0,GY0 : Single; // Global variableÉvénement OnMouseUp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TForm2.Rectangle1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin GMouseDown := True; // Save state GX0 := X; GY0 := Y; end;
C'est trop facile ! Bouton relâché.
Événement OnMouseMove
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 procedure TForm2.Rectangle1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin GMouseDown := False; // our last global variable end;
Implémentons maintenant notre code ! Dans cette partie, nous devons simplement utiliser une condition "if" et changer la position de notre objet de contrôle à mesure que la souris se déplace. Les variables X et Y sont les positions actuelles du curseur.
Notre Code !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 procedure TForm2.Rectangle1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if GMouseDown then begin Rectangle1.Position.X := Rectangle1.Position.X +(X-GX0); Rectangle1.Position.Y := Rectangle1.Position.Y+ (Y-GY0); end; end;
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 unit Unit2; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Objects; type TForm2 = class(TForm) Rectangle1: TRectangle; procedure Rectangle1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Rectangle1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); procedure Rectangle1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); private { Déclarations privées } public { Déclarations publiques } end; var Form2: TForm2; GMouseDown : Boolean = false; GX0,GY0 : Single; implementation {$R *.fmx} procedure TForm2.Rectangle1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin GMouseDown := True; GX0 := X; GY0 := Y; end; procedure TForm2.Rectangle1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin if GMouseDown then begin Rectangle1.Position.X := Rectangle1.Position.X +(X-GX0); Rectangle1.Position.Y := Rectangle1.Position.Y+ (Y-GY0); end; end; procedure TForm2.Rectangle1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Single); begin GMouseDown := False; end; end.
Merci !!!