Bonjour,
Alors que l'événement OnMouseUp est accessible dans l'inspecteur d'objet (BCB6) d'un TGroupBox, il n'apparait pas pour un TRadioGroup.
Y a-t-il moyen d'intercepter cet événement sans avoir à utiliser un "hook" ?
Merci
AL
Bonjour,
Alors que l'événement OnMouseUp est accessible dans l'inspecteur d'objet (BCB6) d'un TGroupBox, il n'apparait pas pour un TRadioGroup.
Y a-t-il moyen d'intercepter cet événement sans avoir à utiliser un "hook" ?
Merci
AL
Bonjour,
A priori oui, en observant bien les propriétés de la 'chose' on vois que cela est possible au travers de ces 'Buttons'.
Ce qui veut dire qu'il faut déclarer un évènement OnMouseUp 'standard' pour les Items du RadioGroup et affecter cet évènement en dynamique (par le code quoi) aux Items concernés.
.dans le .h:
.dans le .cpp:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 void __fastcall OnRadioMouseUp(TObject *Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y);
J'ai essayé de dériver un composant de la classe TRadioGroup et de capter le message WM_MBUTTONUP mais cela ne semble pas fonctionner sans que l'on passe par un évènement déclenché par un Items spécifique dans le RadioGroup ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //le nouvel évènement : void __fastcall TForm2::OnRadioMouseUp(TObject *Sender, TMouseButton Button, Classes::TShiftState Shift, int X, int Y) { ShowMessage("oki mouse up !"); } //---------------------------------------------------------------------- //affectation de l'évènement a un Item du TRadioGroup: void __fastcall TForm2::Button27Click(TObject *Sender) { RadioGroup1->Buttons[0]->OnMouseUp = OnRadioMouseUp; }
Cela donnerai qqchose comme :
A appronfondir quoi, mais je n'ai malheureusement pas le temps de suite, dsl.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class TMRD : public TRadioGroup { private: void __fastcall OnMouseUp(TMessage &msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_MBUTTONUP, TMessage, OnMouseUp) END_MESSAGE_MAP(TRadioGroup) public: __fastcall TMRD(TComponent* Owner); };
En espérant t'aider,
@ +![]()
Merci pour la réponse.
J'avais aussi essayé sans succés ta seconde méthode (utilisation d'un MESSAGE_MAP)
Concernant ta première methode :
- Buttons n'est pas un membre de TRadioGroup, donc cela ne fonctionne pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part RadioGroup1->Buttons[0]->OnMouseUp = OnRadioMouseUp;
- Si je mets RadioGroup1->OnMouseUp = OnRadioMouseUp; j'ai le message d'erreur : "OnMouseUp n'est pas accessible"![]()
Envoyé par alain lecomte
![]()
Ben écoutes ... comment cela se fait il que mon EDI a moi me le propose ? ...
![]()
J'invente rien : j'écris 'RadioGroup1', je met '->', je laisse tourner la bécane et la j'obtiens tous les membres accessibles dans lesquels je trouve 'Buttons'.
Mais est ce le fait que je suis avec le BDS et non le Builder ?
(ça m'étonnerais un peu, mais bon...)
@+
![]()
C'est probablement l'explication, car avec BCB6 voila ce qu'il propose pour les B...Envoyé par Sunchaser
Aprés tout, il faut bien que les nouveaux produits soient plus performants![]()
Bonsoir,
Mille excuses, effectivement je ne pensais pas réellement que cela soit spécifique au BDS ...![]()
Pour la seconde méthode, en plus, je m'étais trompé dans le nom du message a capter. Il faut y voir (par ex):
Mais cela ne fonctionne que lors d'un click dans le Radiogroup mais en dehors d'un des items ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 class TMRD : public TRadioGroup { private: void __fastcall OnMouseUp(TMessage &msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_LBUTTONUP, TMessage, OnMouseUp) END_MESSAGE_MAP(TRadioGroup) public: __fastcall TMRD(TComponent* Owner); };![]()
J'imagine que cela ne correspond pas a ce que tu cherchais.
D'ailleurs, sans indiscrétion, qu'elle était la finalité de vouloir capter le 'MouseUp' ? En fonction des cas, peut être peut on imaginer travailler avec le WM_PAINT sur l'objet en question, ou qqchose comme cela (?)
@ +![]()
Bonjour
Le but est de modifier la taille d'une fenêtre par un click droit en cliquant n'importe où sur cette fenêtre, y compris ses composants : Pour mieux comprendre, télécharge le petit programme suivant : Capture et fait un click droit sur l'unique bouton -> la fenêtre s'agrandit. Un second click droit - y compris sur le radio group - doit pouvoir retrécir la fenêtre.Envoyé par Sunchaser
Bonjour,
Fais comme proposé par Sunchaser, en interceptant le message WM_RBUTTONUP.
Utilise la même méthode pour définir une classe héritant de TRadioButton. Lorsque que tu reçois ton message, transmet le au parent (qui doit être le RadioGroup).
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 class TMyRadioGroup : public TRadioGroup { private: void __fastcall OnMouseUp(TWMMouse &msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_RBUTTONUP, TWMMouse, WMMouseUp) END_MESSAGE_MAP(TRadioGroup) void __fastcall WMMouseUp(TWMMouse &Message); public: __fastcall TMyRadioGroup(TComponent* Owner); }; class TMyRadioButton : public TRadioButton { private: void __fastcall OnMouseUp(TWMMouse &msg); BEGIN_MESSAGE_MAP MESSAGE_HANDLER(WM_RBUTTONUP, TWMMouse, WMMouseUp) END_MESSAGE_MAP(TRadioButton) void __fastcall WMMouseUp(TWMMouse &Message); public: __fastcall TMyRadioButton(TComponent* Owner); };En espérant que cela t'aidera.
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 __fastcall TMyRadioGroup::TMyRadioGroup(TComponent* Owner):TRadioGroup(Owner){ } void __fastcall TMyRadioGroup::WMMouseUp(TWMMouse &Message){ //Réduction de ta fenètre } __fastcall TMyRadioButton::TMyRadioButton(TComponent* Owner):TRadioButton(Owner){ } void __fastcall TMyRadioButton::WMMouseUp(TWMMouse &Message){ if (this->Parent != NULL) SendMessage(this->Parent->Handle,Message.Msg,0,0); //Transmet le message au parent }
Cordialement,
Benjamin
Excellent : Fonctionnement correct en utilisant cette méthode.Envoyé par Grosbenji
Merci à vous deux![]()
Partager