OVH Cloud OVH Cloud

curseur sur boîte message

9 réponses
Avatar
Laurent
Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la boîte
message lorsque celle-ci apparaît (comme ceci se fait pour toutes les autres
applications)

Merci de votre aide

Laurent

9 réponses

Avatar
Eric
Bonjour,

Qu'entends tu par mettre le curseur dessus ?

Par exemple si tu mets le bouton OkCancel dans ta msgbox, pour activer
le bouton Cancel à l'affichage :
MsgBox "Annuler activé", vbOKCancel + vbDefaultButton2
Le bouton Ok est par défaut le bouton actif


Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la boîte
message lorsque celle-ci apparaît (comme ceci se fait pour toutes les autres
applications)

Merci de votre aide

Laurent


--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Jessy Sempere [MVP]
Bonjour

A défaut d'être pile poil dessus, on peut s'en rapprocher un maximum...

Tu peux utiliser le code suivant qui te permettra de centrer ton curseur
sur l'écran.

Il te suffit d'appeler la fonction "CenterCursor" juste avant ton
message box

***************************************************
'** Déclaration des API
Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias
"GetDeviceCaps" _
(ByVal hDc As Long, ByVal nIndex As Long) As Long

Public Declare Function apiGetDC Lib "user32" _
Alias "GetDC" (ByVal hWnd As Long) As Long

Public Declare Function apiReleaseDC Lib "user32" _
Alias "ReleaseDC" (ByVal hWnd As Long, _
ByVal hDc As Long) As Long

Public Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

Public Const HorzRes = 8
Public Const VertRes = 10

Public Const HWND_DESKTOP = 0
Public Const SPI_GETWORKAREA = 48

Public Sub CenterCursor()
SetCursorPos apiLargeurEcran / 2, apiHauteurEcran / 2
End Sub

Public Function apiHauteurEcran()
'** Résolution verticale de l'écran
Dim hDc As Long
hDc = apiGetDC(HWND_DESKTOP)
apiHauteurEcran = apiGetDeviceCaps(hDc, VertRes)
apiReleaseDC HWND_DESKTOP, hDc
End Function

Public Function apiLargeurEcran()
'** Résolution horizontale de l'écran
Dim hDc As Long
hDc = apiGetDC(HWND_DESKTOP)
apiLargeurEcran = apiGetDeviceCaps(hDc, HorzRes)
apiReleaseDC HWND_DESKTOP, hDc
End Function
***************************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Laurent" a écrit dans le message news:

Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la
boîte

message lorsque celle-ci apparaît (comme ceci se fait pour toutes les
autres

applications)

Merci de votre aide

Laurent


Avatar
Jessy Sempere [MVP]
Re,

Voici une fonction qu'il faudra que je mette sur mon site...

Donc elle permet de définir si on veut centrer ou non la boîte message
(par défaut elle est centrée)
et aussi de positionner ou non la souris sur le bouton "OK" (par défaut
c'est vrai).

Pour l'utiliser il suffit d'appeler la fonction fMsgBox comme la fonction
MsgBox
classique.

Voilà le code à copier dans un module...

PS : Cette fonction doit-être utilisée depuis Access, si on la lance depuis
VBA, elle ne marchera pas, par contre depuis un formulaire, pas de problème.

***************************************************
Public Declare Function UnhookWindowsHookEx Lib "user32" ( _
ByVal hHook As Long) As Long

Public Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) _
As Long

Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long

Public Declare Function SetWindowsHookEx Lib "user32" Alias _
"SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _
ByVal hmod As Long, ByVal dwThreadId As Long) As Long

Public 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

Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd _
As Long, lpRect As RECT) As Long

Public Declare Function FindWindowEx& Lib "user32" Alias "FindWindowExA" _
(ByVal hWndParent&, ByVal hWndChildAfter&, ByVal lpClassName$, ByVal
lpWindowName$)

Public Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

Public Const GWL_HINSTANCE = (-6)
Public Const SWP_NOSIZE = &H1
Public Const SWP_NOZORDER = &H4
Public Const SWP_NOACTIVATE = &H10
Public Const HCBT_ACTIVATE = 5
Public Const WH_CBT = 5

Public hHook As Long
Public msgBoxCenter As Boolean
Public msgBoxCursorAuto As Boolean

Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Function WinProc(ByVal lMsg As Long, _
ByVal wParam As Long, _
ByVal lParam As Long) As Long

Dim hButton As Long
Dim rectMsg As RECT
Dim rectButton As RECT
Dim x As Long, y As Long

If lMsg = HCBT_ACTIVATE Then
GetWindowRect wParam, rectMsg
If msgBoxCenter = False Then
x = 0: y = 0
SetWindowPos wParam, 0, x, y, 0, 0, _
SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
End If

If msgBoxCursorAuto = True Then
hButton = FindWindowEx(wParam, False, "Button", "OK")
GetWindowRect hButton, rectButton
SetCursorPos rectButton.Left + ((rectButton.Right -
rectButton.Left) / 2), _
rectButton.Top + (rectButton.Bottom - rectButton.Top) / 2
End If
UnhookWindowsHookEx hHook
End If
WinProc = False

End Function

Public Function fMsgBox(strMsg As String, Buttons As VbMsgBoxStyle, _
Optional Center As Boolean = True, Optional CursorAuto As Boolean True)

msgBoxCenter = Center
msgBoxCursorAuto = CursorAuto

Dim hInst As Long
Dim Thread As Long
hInst = GetWindowLong(Application.hWndAccessApp, GWL_HINSTANCE)
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, hInst, Thread)

MsgBox strMsg, Buttons

End Function
***************************************************

--
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Laurent" a écrit dans le message news:

Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la
boîte

message lorsque celle-ci apparaît (comme ceci se fait pour toutes les
autres

applications)

Merci de votre aide

Laurent


Avatar
3stone
Salut Jessy,

"Jessy Sempere [MVP]"
| Voici une fonction qu'il faudra que je mette sur mon site...
|
| Donc elle permet de définir si on veut centrer ou non la boîte message
| (par défaut elle est centrée)
| et aussi de positionner ou non la souris sur le bouton "OK" (par défaut
| c'est vrai).
<snip>


Peut-être... mais je trouve que c'est typiquement le genre de chose
qui est le boulot de l'OS et non du programme à gérer cela.

Si en tant qu'utilisateur je souhaite cela, il y a ce qu'il faut
dans mon panneau de configuration !

De façon générale je n'aime pas que ce soit le soft qui décide
ce qui est bien pour moi, en tout cas pas lorsqu'il s'agit d'ergonomie.
Mais pas seulement... les rapides de la gâchette, ceux qui ne lisent
pas les messages auront d'autant plus vite cliquez 'ok'
sans même savoir pourquoi :-/

Autant ajouter le fameux "ClicYes" :o))


AMHA


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw
Avatar
Laurent
Merci du tuyau.

Laurent



Bonjour

A défaut d'être pile poil dessus, on peut s'en rapprocher un maximum...

Tu peux utiliser le code suivant qui te permettra de centrer ton curseur
sur l'écran.

Il te suffit d'appeler la fonction "CenterCursor" juste avant ton
message box

***************************************************
'** Déclaration des API
Public Declare Function apiGetDeviceCaps Lib "gdi32" Alias
"GetDeviceCaps" _
(ByVal hDc As Long, ByVal nIndex As Long) As Long

Public Declare Function apiGetDC Lib "user32" _
Alias "GetDC" (ByVal hWnd As Long) As Long

Public Declare Function apiReleaseDC Lib "user32" _
Alias "ReleaseDC" (ByVal hWnd As Long, _
ByVal hDc As Long) As Long

Public Declare Function SetCursorPos Lib "user32" _
(ByVal x As Long, ByVal y As Long) As Long

Public Const HorzRes = 8
Public Const VertRes = 10

Public Const HWND_DESKTOP = 0
Public Const SPI_GETWORKAREA = 48

Public Sub CenterCursor()
SetCursorPos apiLargeurEcran / 2, apiHauteurEcran / 2
End Sub

Public Function apiHauteurEcran()
'** Résolution verticale de l'écran
Dim hDc As Long
hDc = apiGetDC(HWND_DESKTOP)
apiHauteurEcran = apiGetDeviceCaps(hDc, VertRes)
apiReleaseDC HWND_DESKTOP, hDc
End Function

Public Function apiLargeurEcran()
'** Résolution horizontale de l'écran
Dim hDc As Long
hDc = apiGetDC(HWND_DESKTOP)
apiLargeurEcran = apiGetDeviceCaps(hDc, HorzRes)
apiReleaseDC HWND_DESKTOP, hDc
End Function
***************************************************
@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"Laurent" a écrit dans le message news:

Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la
boîte

message lorsque celle-ci apparaît (comme ceci se fait pour toutes les
autres

applications)

Merci de votre aide

Laurent







Avatar
Laurent
Non pas pour activer le bouton, mais simplement pour positionner le curseur
de la souris dessus. J'ai obtenu la réponse.

Merci de ton aide.

Laurent


Bonjour,

Qu'entends tu par mettre le curseur dessus ?

Par exemple si tu mets le bouton OkCancel dans ta msgbox, pour activer
le bouton Cancel à l'affichage :
MsgBox "Annuler activé", vbOKCancel + vbDefaultButton2
Le bouton Ok est par défaut le bouton actif


Bonjour à Tous,

Je cherche la solution pour que le cursuer se place sur le "OK" de la boîte
message lorsque celle-ci apparaît (comme ceci se fait pour toutes les autres
applications)

Merci de votre aide

Laurent


--
A+
Eric
http://users.skynet.be/mpfa/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr




Avatar
Laurent
...De façon générale je n'aime pas que ce soit le soft qui décide
ce qui est bien pour moi, en tout cas pas lorsqu'il s'agit d'ergonomie.
Mais pas seulement... les rapides de la gâchette, ceux qui ne lisent
pas les messages auront d'autant plus vite cliquez 'ok'
sans même savoir pourquoi :-/...

La remarque est subtile et je m'en tiendrai à elle.

Merci pour l'info.


Laurent



Salut Jessy,

"Jessy Sempere [MVP]"
| Voici une fonction qu'il faudra que je mette sur mon site...
|
| Donc elle permet de définir si on veut centrer ou non la boîte message
| (par défaut elle est centrée)
| et aussi de positionner ou non la souris sur le bouton "OK" (par défaut
| c'est vrai).
<snip>


Peut-être... mais je trouve que c'est typiquement le genre de chose
qui est le boulot de l'OS et non du programme à gérer cela.

Si en tant qu'utilisateur je souhaite cela, il y a ce qu'il faut
dans mon panneau de configuration !

De façon générale je n'aime pas que ce soit le soft qui décide
ce qui est bien pour moi, en tout cas pas lorsqu'il s'agit d'ergonomie.
Mais pas seulement... les rapides de la gâchette, ceux qui ne lisent
pas les messages auront d'autant plus vite cliquez 'ok'
sans même savoir pourquoi :-/

Autant ajouter le fameux "ClicYes" :o))


AMHA


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw




Avatar
Jessy Sempere [MVP]
Salut Pierre

Effectivement, pour la position sur le bouton OK, je suis d'accord
par contre c'est vrai que le msgbox et toujours centrée et je pense
qu'il peut quand même être interressant de pouvoir le positionner à un
endroit bien précis (genre au centre d'un formulaire qui lui n'est pas
centré...)

Enfin bon, j'ai un peu galérer à faire ce code mais je dois avouer
que c'était interressant à mettre en oeuvre, ça faisait longtemps
que je ne m'étais pas cassé la tête sur un problème Access et j'avoue
que j'apprécis toujours autant... ;-)))

@+
Jessy Sempere - Access MVP

------------------------------------
Site @ccess : http://access.jessy.free.fr/
Pour l'efficacité de tous :
http://users.skynet.be/mpfa/
------------------------------------
"3stone" a écrit dans le message news:

Salut Jessy,

"Jessy Sempere [MVP]"
| Voici une fonction qu'il faudra que je mette sur mon site...
|
| Donc elle permet de définir si on veut centrer ou non la boîte message
| (par défaut elle est centrée)
| et aussi de positionner ou non la souris sur le bouton "OK" (par défaut
| c'est vrai).
<snip>


Peut-être... mais je trouve que c'est typiquement le genre de chose
qui est le boulot de l'OS et non du programme à gérer cela.

Si en tant qu'utilisateur je souhaite cela, il y a ce qu'il faut
dans mon panneau de configuration !

De façon générale je n'aime pas que ce soit le soft qui décide
ce qui est bien pour moi, en tout cas pas lorsqu'il s'agit d'ergonomie.
Mais pas seulement... les rapides de la gâchette, ceux qui ne lisent
pas les messages auront d'autant plus vite cliquez 'ok'
sans même savoir pourquoi :-/

Autant ajouter le fameux "ClicYes" :o))


AMHA


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw



Avatar
3stone
Salut Jessy,

"Jessy Sempere [MVP]"
| Effectivement, pour la position sur le bouton OK, je suis d'accord


Je ne parlait que du fait de déplacer automatiquement le curseur
sur le msgbox (et à fortiori sur le bouton)

En dehors des Lucky Luke du clic, il y a un autre grand désavantage.
J'explique:
Sur un grand écran et plutôt une grande résolution, comme du
1280x1024 ou mieux 1600x1200, on est obliger de mettre le "turbo"
sur la souris pour ne pas devoir pédaler comme un fou...
Si c'est "autre chose" que le mouvement de la souris qui déplace
le curseur, on est obliger régulièrement de repositionner la souris
par rapport à son espace de travail normal.
Ce qui, au lieu d'un "gain" devient une perte énorme :-/
C'est comme vouloir nager dans sa baignoire...

Au début, j'avais essayé cette 'faiture' et déduis que les
dévellopeurs MS ne devaient travailler qu'en 640x480 au max :o))



| par contre c'est vrai que le msgbox et toujours centrée et je pense
| qu'il peut quand même être interressant de pouvoir le positionner à un
| endroit bien précis (genre au centre d'un formulaire qui lui n'est pas
| centré...)

Oh oui, le principe... placer le msgbox là ou est porté le regard...



| et j'avoue que j'apprécis toujours autant... ;-)))

Et heureusement pour tout le monde ;-)


--
A+
Pierre (3stone) Access MVP
Perso: http://users.skynet.be/accesshome/
Conseils MPFA: http://users.skynet.be/mpfa/
Email : http://www.cerbermail.com/?Xfg61Z3IQw