Bonjour tout le monde
J'ai une question où se trouve WMNCHitTest parce que j'ai voulu le faire mais je ne le vois pas dans evénements.
Merci.
Dis nous en plus si tu veux une réponse...
1) Où as tu trouvé ce joli mot ? "WMNCHitTest "
2) Sur quel composant tu veux l'appliquer ?
3) Sais tu te servir d'un message (en création de composant) ?
=> Tu ne le trouveras pas dans les évenements d'un composant car c'est un message Windows, enfin tout dépends du composant qui l'implémente, enfin bref on peut pas répondre à ta question sans précisions.
Cordialement,
Une autre technique utilise le message WM_NCHITTEST envoyé par Windows à votre fenêtre lorsque l'utilisateur bouge la souris. La réponse à ce message est utilisée par Windows pour déterminer dans quelle zone se trouve la souris : dans la partie cliente, sur un bouton système, sur un des bords, etc. Une de ces réponses nous intéresse particulièrement, il s'agit de la valeur HTCAPTION qui indique à Windows que le curseur se trouve sur la barre de titre. Dans ce cas, Windows interprètera le déplacement de la souris avec le bouton gauche enfoncé comme un déplacement de la fenêtre. C'est exactement ce qu'il nous faut. Nous allons donc ajouter un gestionnaire de message pour WM_NCHITTEST à notre fenêtre et retourner la valeur HTCAPTION. L'exemple suivant autorise le déplacement si le curseur se trouve dans la bande de 20 pixels de haut située en haut de la fenêtre, ce qui nous permet de simuler notre propre barre de titre.
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 interface uses Windows, Messages, Classes, Forms; type TForm1 = class(TForm) private { Déclarations privées } public { Déclarations publiques } procedure WMNCHitTest(var msg: TWMNCHitTest); message WM_NCHITTEST; end; var Form1: TForm1; implementation {$R *.DFM} procedure TForm1.WMNCHitTest(var msg: TWMNCHittest); var pt: TPoint; begin inherited; pt:= ScreenToClient(Point(msg.XPos, msg.YPos));
et j'ai créer une forme
créé un nouveau projet avec une seule fiche
mis la propriété Borderstyle=bsnone
mis la propriété TransparentColor=true
mis la propriété TransparentColorvalue=clblue
mis la propriété Color=clblue
et j'ai mis une image et je veux la faire bouger.
bonsoir,
j'imagine, crash override qie tu parles de ce sujet de la faq : http://delphi.developpez.com/faq/?pa...#deplacerfiche ?
QU'est ce que tu n'as pas compris ? Il suffit de faire comme cela est indiquer dans la FAQ... Tu rajoute une procédure à ta fiche et tu déclare cet procedure dans la partie public de ta form.
je le fais, mais ça ne va pas
voici mon code
pour cette partie-là, j'ai fait un copier-coller
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 Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Image1: TImage; Button1: TButton; Monedit: TEdit; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Image2Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Déclarations privées } public { Déclarations publiques } procedure WMNCHitTest(var msg: TWMNCHitTest); message WM_NCHITTEST; end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin Close; end; procedure TForm1.Image2Click(Sender: TObject); begin Close; end; procedure TForm1.Button2Click(Sender: TObject); begin Monedit.Text:='bonjour'; end; procedure TForm1.WMNCHitTest(var msg: TWMNCHittest); var pt: TPoint; begin inherited; pt:= ScreenToClient(Point(msg.XPos, msg.YPos)); if PtInRect(Rect(0, 0, ClientWidth, 20), pt) then msg.Result:= HTCAPTION; end; end.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 procedure TForm1.WMNCHitTest(var msg: TWMNCHittest); var pt: TPoint; begin inherited; pt:= ScreenToClient(Point(msg.XPos, msg.YPos)); if PtInRect(Rect(0, 0, ClientWidth, 20), pt) then msg.Result:= HTCAPTION; end;
Je viens d'essayer, et ton code fonctionne sans soucis.
On est bien d'accord, ce code sert à permettre de reproduire le comportement de la barre de titre dans le cas d'une fenêtre sans barre de titre.
Donc, si tu cliques dans le haut de ta fiche et que tu restes cliqué tout en déplaçant ta souris, la fiche doit suivre.
C'est bien ça ??
c'est bon, il va.
J'ai fait ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 procedure TForm1.WMNCHitTest(var msg: TWMNCHittest); var pt: TPoint; begin inherited; if msg.Result = htClient then msg.Result := htCaption; end;
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager