Salut, je voudrais intercepter le click de la souris sur la barre de titre de la fenetre de mon application.
Comment faire?
Merci.
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
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
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...
Mac LAK.
___________________________________________________
Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.
Sources et composants Delphi sur mon site, L'antre du Lak.
Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.
Rejoignez-nous sur : ► Serveur de fichiers [NAS] ► Le Tableau de bord projets ► Le groupe de travail ICMO
Envoyé par ilyes
aïe
zut
Alors, il faut que tu fasses un HOOK souris.
MD Software
---------------------------
F.A.Q. Delphi - Cours Delphi - Composants Delphi - Sources Delphi
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 note
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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.![]()
Partager