Salut, je voudrais intercepter le click de la souris sur la barre de titre de la fenetre de mon application.
Comment faire?
Merci.
Version imprimable
Salut, je voudrais intercepter le click de la souris sur la barre de titre de la fenetre de mon application.
Comment faire?
Merci.
Code l'évènement onMouseDown, et teste les positions de X et de Y
L'evenement OnMouseDown ne se declanche pas sur la barre de titre ! :?
Normal, la barre de titre n'appartient pas réellement à ton application, mais à Windows... Pour le "comment le détecter", vaut mieux aller sur le forum "Développement Windows", mais ça risque d'être un peu chaud à interfacer en Delphi.
Tu veux faire quoi exactement de cette détection de clic ? Il y a peut-être une autre (voire meilleure) solution que la détection des évènement souris...
:evil: aïeCitation:
Envoyé par ilyes
zut
Alors, il faut que tu fasses un HOOK souris.
Il est possible de capter l'event souhaité.
je propose ci-dessous un exemple de code qui le fait.par rapport a l'impplementtation 'standard' on noteCode:
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 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls; type TForm1 = class(TForm) procedure FormActivate(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } procedure SubClassWndProc(var Msg: TMessage); end; var Form1: TForm1; implementation {$R *.dfm} var H : HWND; procedure TForm1.SubClassWndProc(var Msg: TMessage); var L : LPARAM ; begin case Msg.Msg of WM_CAPTURECHANGED: begin // on passe ici meme si on click sur la barre du haut H := HWND (L); // handle of window to gain mouse capture // ajouter ici les actions à mener //pour test par exemple form1.caption := form1.caption + 'X'; end; end; WndProc(Msg); // INDISPENSABLE de rebrancher sur wndproc end; procedure TForm1.FormActivate(Sender: TObject); begin WindowProc := SubClassWndProc; end; end.
1- l'ajout de procedure SubClassWndProc(var Msg: TMessage);
dans la partie public de form1
2- le "detournement" de winproc avec WindowProc := SubClassWndProc;
dans l'activation de la form
3- la capture des evenements WM_CAPTURECHANGED
Ceci est détaillé dans MSDN.COM dans la rubrique developper.
http://msdn.microsoft.com/developercenters/
ce genre d'interception permet de capter quasiment tous ls messages window et les traiter " à la base" comme audio, communications, mouse, controls, ...
Non, les événements sont aussi envoyés à la fenêtre, seulement les messages ne sont pas les même. Les codes sont en WM_NCxxxxx au lieu de WM_yyyyyy.
Il existe alors une méthode simple pour les intercepter. Placez un composant TApplicationEvents sur la fiche et dans le OnMessage :
( ce code est pour le bouton gauche )Code:
1
2
3
4
5
6
7
8 procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean); begin If (Msg.message = WM_NCLBUTTONDOWN)And(Msg.hwnd=Handle) then Begin //... End; end;
Merci à vous. :wink: