sese817
Messages postés38Date d'inscriptionsamedi 19 avril 2003StatutMembreDernière intervention28 avril 2004
-
12 juin 2003 à 22:30
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 2015
-
10 sept. 2004 à 00:52
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 10 sept. 2004 à 00:52
encore moi :-)
pour finir je dirais que voila g fait un module pour garder le focus d'une form sur une autre, un peu comme une msgbox. je n'utilise pas ma méthode cité au dessus et c mieux.
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 9 sept. 2004 à 19:33
oh yes ! g trouvé ce que je cherchai, je vous en fais part :
donc vous choisissez une méthode pour garder le focus sur votre form et vous mettez ca en plus :
ds les déclarations :
'pour simuler l'action de la souris, autre que le mouvement
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
puis là ou vous avez votre méthode de keep focus :
(ds mon cas c ce que j'ai proposé juste au dessus)
Private Sub Form_Deactivate()
Dim cButt As Long
Dim dwEI As Long
'dans cet exemple, ca lève le bouton gauche de la souris
mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI
DoEvents
Me.setfocus
End Sub
dans cette exemple ca lève le bouton gauche de la souris. donc si vous cliquez avec le bouton gauche, mettons ailleurs que sur votre form,eh bien ca l'annule, et remet la form en focus.
biensur faut blinder avec select case pour le bouton de la souris, et avec la position du click de la souris, pour ne pas annuler le clic du bouton de votre form, mais plutot annuler les clics en dehors de la form. ajoutez un beep qd le click est endehors et ca fait comme pour une message box. :-) là je suis content tout d'un coup.
Philippe734
Messages postés308Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention15 juin 20151 9 sept. 2004 à 19:16
ca m'interesse bcp ce keep focus
pour garder le focus y avai aussi :
Private Sub Form_Deactivate()
Me.setfocus
End Sub
MAIS , les réponses sont pas parfaites. si on clique sur une form en arriere plan, le clique sera qd meme valide. c-a-d si l'on clique sur un bouton d'une fenetre en arriere plan, y aura qd meme l'évenement du bouton qui se produira. donc comment faire pour garder le focus une fenetre et d'empecher de cliquer sur une autre, un peu comme une msgbox, sur msgbox on ne peut pas cliquer sur la fenetre qui est derriere. voyez...
je cherche ds la voie qui lache le bouton de la souris, mais je trouve pas.
comment faire ?
:-)
UnExPeCtEdSpy
Messages postés139Date d'inscriptionmercredi 7 août 2002StatutMembreDernière intervention 3 juillet 2003 13 juin 2003 à 19:36
Lol merci les gars (bien que vous auriez pu me faire l'honneur de donwload la source :p) vous auriez vu qu'elle est déjà en premier plan forcée :)
Effectivement j'avais oublié la propriété Setfocus, qui correspond exactement a ce que je chercher :)
Merci a+
cs_Krach
Messages postés18Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention13 septembre 2003 13 juin 2003 à 17:35
En effet, mais ça ne bouffe pas trop le CPU le fait que le Timer soit toujours en fonctionnement?
ICIoBRa
Messages postés368Date d'inscriptiondimanche 24 juin 2001StatutMembreDernière intervention 7 décembre 2015 13 juin 2003 à 17:33
Nan ça ca reste visible à l'écran kand on click otre part, mais ça ne garde pas le focus...
+²
cs_Krach
Messages postés18Date d'inscriptionsamedi 21 décembre 2002StatutMembreDernière intervention13 septembre 2003 13 juin 2003 à 16:30
Sinon, pour une version sans Timer il y a ça :
1) fais un module qui contiendra ça :
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Et voilà, c'est peut-etre plus long que les message ci-dessu mais ça n'utilise pas de Timer.
@+
ICIoBRa
Messages postés368Date d'inscriptiondimanche 24 juin 2001StatutMembreDernière intervention 7 décembre 2015 13 juin 2003 à 11:13
Tu mets juste le timer avec le Me.SetFocus t'en a assé ;)
+²
sese817
Messages postés38Date d'inscriptionsamedi 19 avril 2003StatutMembreDernière intervention28 avril 2004 12 juin 2003 à 22:30
Salut tu fais d'abord un module tu y met :
Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
10 sept. 2004 à 00:52
pour finir je dirais que voila g fait un module pour garder le focus d'une form sur une autre, un peu comme une msgbox. je n'utilise pas ma méthode cité au dessus et c mieux.
ca devrai vous interesser :-)
http://www.vbfrance.com/code.aspx?ID=26048
elle pourrai clignoter aussi
9 sept. 2004 à 19:33
donc vous choisissez une méthode pour garder le focus sur votre form et vous mettez ca en plus :
ds les déclarations :
'pour simuler l'action de la souris, autre que le mouvement
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
puis là ou vous avez votre méthode de keep focus :
(ds mon cas c ce que j'ai proposé juste au dessus)
Private Sub Form_Deactivate()
Dim cButt As Long
Dim dwEI As Long
'dans cet exemple, ca lève le bouton gauche de la souris
mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, cButt, dwEI
DoEvents
Me.setfocus
End Sub
dans cette exemple ca lève le bouton gauche de la souris. donc si vous cliquez avec le bouton gauche, mettons ailleurs que sur votre form,eh bien ca l'annule, et remet la form en focus.
biensur faut blinder avec select case pour le bouton de la souris, et avec la position du click de la souris, pour ne pas annuler le clic du bouton de votre form, mais plutot annuler les clics en dehors de la form. ajoutez un beep qd le click est endehors et ca fait comme pour une message box. :-) là je suis content tout d'un coup.
9 sept. 2004 à 19:16
pour garder le focus y avai aussi :
Private Sub Form_Deactivate()
Me.setfocus
End Sub
MAIS , les réponses sont pas parfaites. si on clique sur une form en arriere plan, le clique sera qd meme valide. c-a-d si l'on clique sur un bouton d'une fenetre en arriere plan, y aura qd meme l'évenement du bouton qui se produira. donc comment faire pour garder le focus une fenetre et d'empecher de cliquer sur une autre, un peu comme une msgbox, sur msgbox on ne peut pas cliquer sur la fenetre qui est derriere. voyez...
je cherche ds la voie qui lache le bouton de la souris, mais je trouve pas.
comment faire ?
:-)
13 juin 2003 à 19:36
Effectivement j'avais oublié la propriété Setfocus, qui correspond exactement a ce que je chercher :)
Merci a+
13 juin 2003 à 17:35
13 juin 2003 à 17:33
+²
13 juin 2003 à 16:30
1) fais un module qui contiendra ça :
Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Public Sub RendreFormTjsVisible(MonForm As Object)
SetWindowPos MonForm.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
Public Sub RendreFormPasTjsVisible(MonForm As Object)
SetWindowPos MonForm.hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
End Sub
2) Met ça dans Form_Load :
RendreFormTjsVisible Form1
__________________________________________________________________
Et voilà, c'est peut-etre plus long que les message ci-dessu mais ça n'utilise pas de Timer.
@+
13 juin 2003 à 11:13
+²
12 juin 2003 à 22:30
Declare Sub SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Ensuite dans le load de ta form tu met :
SetWindowPos Form1.hwnd, -1, Form1.Left / 15, _
Form1.Top / 15, Form1.Width / 15, _
Form1.Height / 15, SWP_NOACTIVATE Or SWP_SHOWWINDOW
Enusite tu met un timer avec intervall 10
dedans tu met :
Me.SetFocus
voila allez @ +