Bonjour,
Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...
Merci
Bonjour,
Voila, je cherche à mettre la fenetre de mon application builder toujour en premier plan...
Merci
selmak7 a ecrit:
Un lien sur le FORUMBonjour,
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...
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 : Sélectionner tout - Visualiser dans une fenêtre à part #include "Unit.h"
Voici les événementielles de la souris pour le panel de fond qui vont permettre de déplacer le pavé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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 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 : 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 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...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 ) ; }Ce que j'ai fais aussi, c'est que j'ai rendu ma fenêtre légèrement transparente (pour le style)...
Merci pour ces infos...
Partager