Bonjour,
Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...
Merci
Version imprimable
Bonjour,
Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...
Merci
selmak7 a ecrit:
Un lien sur le FORUMCitation:
Bonjour,
Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...
Merci
Ok merci pour l'info...
En faite, je suis en train de développer un pavé numérique, et il faudrai donc que celui-ci reste toujours en premier plan tout en laissant la fenetre de saisie active...
Ne pas oublier :resolu:
Saut !
Pour donner à ce numpad un aspect moins fenêtré :
- mettre tous les BorderIcons à false
- fixer BorderStyle sur bsNone
- on garde FormStyle fixé sur fsStayOnTop
- on place une TPanel dont on fixe Align sur alClient
Pour ce panel de fond, on fixe (par exemple):
- BevelInner sur bvLowered;
- BevelOuter sur bvRaised
La suite dépend de la manière dont on représente les boutons.
Le plus simple est d'utiliser un ensemble de TPanel dont il est très facile d'éditer les positions.
Il faudra décaler les boutons des bords du panel de fond (8 pixels par exemple).
Ne pas oublier d'inclure le header de la fenêtre principale dans l'unité de cette fiche
On rajoute les propriétés suivantes, en public, dans la class de la fenêtre :Code:#include "Unit.h"
Voici les événementielles de la souris pour le panel de fond qui vont permettre de déplacer le pavé :Code:
1
2bool IsMoving; TPoint StartPos;
Voici maintenant les événementielles de la souris pour les TPanel des touches et partagées par l'ensemble des touches :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 void __fastcall TForm2::Panel1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Form1->SetFocus(); IsMoving = true; StartPos = Point(X,Y); } void __fastcall TForm2::Panel1MouseMove(TObject *Sender, TShiftState Shift, int X, int Y) { if(IsMoving == true) { SetBounds(Left + X - StartPos.x, Top + Y - StartPos.y, Width, Height); } } void __fastcall TForm2::Panel1MouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { IsMoving = false; }
A plus !Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 void __fastcall TForm2::TouchesMouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { Form1->SetFocus(); TPanel *Touche = (TPanel*)Sender; //on récupère le panel qui a généré l'événement Touche->BevelInner = bvLowered; Touche->BevelWidth = 1; //... Touche->Tag pour récupérer une valeur spécifique pour une touche } void __fastcall TForm2::TouchesMouseUp(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { TPanel *Touche = (TPanel*)Sender; //Mêmes valeurs que celles fixées à l'édition pour chaque TPanel d'une touche Touche->BevelInner = bvNone; Touche->BevelOuter = bvRaised; Touche->BevelWidth = 3; }
c'est marrant, c'est exactement ce que j'ai fais...
Mon problème (que j'ai résolu) était que la fonction GetFocus retourne NULL si la focalisation se trouve sur une autre application en cours d'éxécution. Voila l'astuce, pour information (source MSDN) :
Sinon, pour l'esthétique du pavé numérique, je prends : je suis pas trop doué à ce niveau la... :lol: Ce que j'ai fais aussi, c'est que j'ai rendu ma fenêtre légèrement transparente (pour le style)...Code:
1
2
3
4
5
6
7
8
9 HWND HandleId = GetForegroundWindow() ; DWORD ProcessIdTo = GetWindowThreadProcessId( HandleId, NULL ) ; DWORD ProcessId = GetCurrentThreadId() ; if( ProcessId != ProcessIdTo ) { AttachThreadInput( ProcessId, ProcessIdTo, true ) ; HandleTo = GetFocus() ; AttachThreadInput( ProcessId, ProcessIdTo, false ) ; }
Merci pour ces infos...
Alors merci de cliquez sur le bouton :resolu:, en bas de la discution.Citation:
Envoyé par selmak7
:merci: