Bonjour à tous, j'ai voulu pouvoir déplacer un bouton créé dynamiquement à l'aide de la souris, avec l’évènement MouseMove, mais j'ai pas pu ...
Merci de m'avoir indiqué comment procéder.
Bonjour à tous, j'ai voulu pouvoir déplacer un bouton créé dynamiquement à l'aide de la souris, avec l’évènement MouseMove, mais j'ai pas pu ...
Merci de m'avoir indiqué comment procéder.
Salut chiti
C'est possible
le .cpp
le .h
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 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; TButton *Button; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { Button = new TButton(this); Button->Top = 300; Button->Left = 300; Button->Height = 25; Button->Width = 75; Button->Parent = Form1; Button->Visible = true; Button->Caption = "bouton"; Button->OnMouseMove = MonTraiteMouseMove; } //--------------------------------------------------------------------------- void __fastcall TForm1::MonTraiteMouseMove(TObject *Sender, TShiftState, int, int) { // traitement ReleaseCapture(); SendMessage(Button->Handle, WM_SYSCOMMAND, 0xF012, 0); } //---------------------------------------------------------------------------
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 //--------------------------------------------------------------------------- #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { __published: // IDE-managed Components void __fastcall FormCreate(TObject *Sender); private: // User declarations void __fastcall TForm1::MonTraiteMouseMove(TObject *Sender, TShiftState, int, int); public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
Merci pour cette réponse, je ne peux l'essayer pour l'instant vu que je n'ai pas le CodeGear ici, je le ferais ce soir.
J'ai essayé de gérer l'évènement MouseClick pour mes boutons dynamique, et ça a marché à merveil, mais j'ai pas pu le faire pour MouseMove, je te propose mon code, et dis moi POURQUOI ça ne marche pas
Pour le .h
Le .cpp
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 #ifndef Unit1H #define Unit1H //--------------------------------------------------------------------------- #include <Classes.hpp> #include <Controls.hpp> #include <StdCtrls.hpp> #include <Forms.hpp> #include <ComCtrls.hpp> #include <Menus.hpp> //--------------------------------------------------------------------------- class TForm1 : public TForm { private: // Déclarations utilisateur public: // Déclarations utilisateur __fastcall TForm1(TComponent* Owner); TButton *MonBouton1; TButton *MonBouton2; TButton *MonBouton3; void __fastcall MonBouton1Click(TObject *Sender); void __fastcall MonBouton2Click(TObject *Sender); void __fastcall MonBouton3Click(TObject *Sender); void __fastcall MonBouton1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //--------------------------------------------------------------------------- #endif
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105 //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" #include "TBouton.cpp" #include "Unit2.h" #include "Unit3.h" #include "Unit4.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" //--------------------------------------------------------------------------- TForm1 *Form1; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- int creation=1, etape=1, fin=1; int leftCre = 300, topCre=0, topEta = 0; String trait = "___________________________"; UnicodeString nom = "Création"; UnicodeString nom2 = "Etapes"; UnicodeString nom3 = "Fin"; //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { //Ce bouton permet de créer des boutons création autant qu'on veut. topCre += 50; MonBouton1 = new TButton(this); MonBouton1->Left = leftCre; MonBouton1->Top = topCre; MonBouton1->Parent = Form1; creation += 1; MonBouton1->OnClick = MonBouton1Click; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button2Click(TObject *Sender) { //Ce bouton permet de créer des bouton étapes autant qu'on veut. TButton *MonBouton2; MonBouton2 = new TButton(this); MonBouton2->Top = topCre ; MonBouton2->Left = leftCre + 150; MonBouton2->Parent = Form1; TLabel *MonLabel;//Création d'un lien visuel du bouton etapes avec la dernière création MonLabel = new TLabel(this); MonLabel->Top = topCre; MonLabel->Left = leftCre; MonLabel->Caption = trait; MonLabel->Parent = Form1; topEta = topCre; MonBouton2->OnClick = MonBouton2Click; } //--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { //Ce bouton permet de créer des bouton fin autant qu'on veut. TButton *MonBouton3; MonBouton3 = new TButton(this); MonBouton3->Left = leftCre + 300; MonBouton3->Top = topEta; MonBouton3->Parent = Form1; TLabel *MonLabel;//Création d'un lien visuel du bouton fin avec la dernière étape. MonLabel = new TLabel(this); MonLabel->Top = topEta; MonLabel->Left = leftCre + 150; MonLabel->Caption = trait; MonLabel->Parent = Form1; MonBouton3->OnClick = MonBouton3Click; } //--------------------------------------------------------------------------- void __fastcall TForm1::MonBouton1Click(TObject *Sender) { Form2->Show(); //Afficher la fenêtre "Création" } void __fastcall TForm1::MonBouton2Click(TObject *Sender) { Form3->Show(); //Afficher la fenêtre "Etapes" } void __fastcall TForm1::MonBouton3Click(TObject *Sender) { Form4->Show(); //Afficher la fenêtre "Fin" } void __fastcall TForm1::MonBouton1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { TPoint* pt; ReleaseCapture; SendMessage(MonBouton1->Handle, WM_SYSCOMMAND, 61458, 0); GetCursorPos(pt); SendMessage(MonBouton1->Handle, WM_LBUTTONUP, MK_CONTROL, Longint(pt)); } //---------------------------------------------------------------------------
La je seche des que l'on essaye de bouger le TButton celui ci execute un MouseDown alors que le bouton de la souris reste enfonce
Si je comprends bien, tu veux créer un bouton dynamiquement et permettre à l'utilisateur de le placer où il veut, c'est ça?
Si c'est ça. j'avais déjà fait un soft dans le genre, me semble que j'utilisais la technique du "Drag and drop" et ça fonctionnait très bien.
Faudrait que je retrouve le code, mais de mémoire il me semble c'était la forme qui s'occupait de déplacer le bouton et non le bouton lui-même. Ça se faisait via l'événement "FormDragOver".
En effet je crée des boutons dynamiquement, et j'ai pu gérer l'évènement du clique de la souris, mais par contre pas le mouvement de la souris ....
Guyt54 Tu peux m'éclaircir à ce propos s'il te plait !?
Partager