Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questionFlash_curseur Command1
Private Const MOD_ALT = &H1 Private Const MOD_CONTROL = &H2 Private Const MOD_SHIFT = &H4 Private Const PM_REMOVE = &H1 Private Const WM_HOTKEY = &H312 Private Type POINTAPI x As Long y As Long End Type Private Type Msg hWnd As Long Message As Long wParam As Long lParam As Long time As Long pt As POINTAPI End Type Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long Private Declare Function WaitMessage Lib "user32" () As Long Private bCancel As Boolean Private Sub ProcessMessages() Dim Message As Msg Do While Not bCancel WaitMessage If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) And TypeName(ActiveControl) = "CommandButton" Then ActiveControl.Picture = Image1 deb = Timer Do While Timer < deb + 0.2 DoEvents Loop ActiveControl.Picture = Nothing End If DoEvents Loop End Sub Private Sub Form_Activate() For Each c In Controls If TypeName(c) = "CommandButton" Then c.DownPicture = Image1.Picture End If Next Dim ret As Long bCancel = False ret = RegisterHotKey(Me.hWnd, &HBFFF&, 0, vbKeyReturn) ProcessMessages End Sub Private Sub Form_Unload(Cancel As Integer) bCancel = True Call UnregisterHotKey(Me.hWnd, &HBFFF&) End Sub
Option Explicit Private Const PM_REMOVE = &H1 Private Const WM_HOTKEY = &H312 Private Type Msg hWnd As Long Message As Long wParam As Long lParam As Long time As Long End Type Private Declare Function RegisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long Private Declare Function UnregisterHotKey Lib "user32" (ByVal hWnd As Long, ByVal id As Long) As Long Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hWnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long Private Declare Function WaitMessage Lib "user32" () As Long Private Declare Function GetForegroundWindow Lib "user32" () As Long Private bCancel As Boolean Private Sub ProcessMessages() Dim Message As Msg, deb As Single Do While Not bCancel WaitMessage If PeekMessage(Message, Me.hWnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then If TypeName(ActiveControl) = "CommandButton" And GetForegroundWindow = Me.hWnd Then ActiveControl.Picture = Image1 deb = Timer Do While Timer < deb + 0.2 DoEvents Loop ActiveControl.Picture = Nothing End If bCancel = True SendKeys "{ENTER}" bCancel = False End If DoEvents Loop End Sub Private Sub Form_Activate() Dim c As Control, ret As Long For Each c In Controls If TypeName(c) = "CommandButton" Then c.DownPicture = Image1.Picture If c.Style <> 1 And c.Tag <> "1" Then MsgBox "M. Le développeur :veuillez ne pas omettre de mettre à 1 la propriété " & _ "graphical du bouton " & c.Name & " ou mettre 1 dans sa propriété tag si vous ne souhaitez pas animer son clic" End If End If Next bCancel = False ret = RegisterHotKey(Me.hWnd, &HBFFF&, 0, vbKeyReturn) ProcessMessages End Sub Private Sub Form_Unload(Cancel As Integer) bCancel = True Call UnregisterHotKey(Me.hWnd, &HBFFF&) End Sub
Option Explicit Private Sub Form_Initialize() Dim c As Control Set f = Me Image1.Visible = False For Each c In Controls If TypeName(c) = "CommandButton" Then c.DownPicture = Image1.Picture If c.Style <> 1 And c.Tag <> "1" Then MsgBox "M. Le développeur :veuillez ne pas omettre de mettre à 1 la propriété " & _ "Style du bouton " & c.Name & " ou mettre 1 dans sa propriété tag si vous ne souhaitez pas animer son clic" End If End If Next fairegroup f End Sub
Option Explicit Public Collect As Collection, f As Form Public Sub fairegroup(f As Form) Dim c As Object Dim Cl As Class1 Set Collect = New Collection For Each c In f.Controls If TypeName(c) = "CommandButton" Then Set Cl = New Class1 Set Cl.toto = c Collect.Add Cl End If Next c End Sub
Option Explicit Public WithEvents toto As CommandButton Private Sub toto_Click() Dim deb As Single toto.Picture = f.Image1.Picture deb = Timer Do While Timer < deb + 0.2 DoEvents Loop toto.Picture = Nothing End Sub
25 sept. 2013 à 13:18
Modifié par ucfoutu le 25/09/2013 à 13:35
Une question à 5 soles péruviens :
Pourquoi aucune des applications Windows n'a "agrémenté" ses clics de cette "poussière à la Peter Pan" ?
Réponse à 100 euros : parce que cela n'apporte rien de sérieux, ralentit, alourdit et n'amuse que les petits enfants.
25 sept. 2013 à 15:57
Modifié par ucfoutu le 25/09/2013 à 16:30
Je n'en vois pourtant aucune, personnellement, qui serait dans ce cas et imposée.
Mais bon ...
Mais te rends-tu compte, au moins, de ce que ta "solution" n'en est pas une, puisque (relis donc la demande) :
1) il faudrait l'appliquer à chaque clic (de chaque contrôle)
2) tu modifies quoi ? l'aspect du pointeur, au click de la souris. Je te rappelle que l'on peut cliquer par exemple un bouton de commande sans utiliser la souris. Ton "truc" va alors faire "scintiller" ailleurs que sur le bouton concerné
Mais bon ...
25 sept. 2013 à 17:14
1) Oui et alors ? Seul le demandeur sait combien il y aura de contrôles où l'on voudra cet effet.
2) On modifie l'aspect du pointeur, c'est ce qui est demandé. Dans mon vocabulaire actionner un bouton avec le clavier s'appelle taper pas cliquer et cela occasionne d'autres évènements du contrôle.
3) J'ai écris que c'était simplement une proposition de ma part, qui a des défauts mais qui a le mérite de fonctionner parfaitement. Rien n'empêche d'autres personnes de proposer leurs solutions, ce serait plus constructif et utile que de critiquer celles des autres. Je serais le premier à applaudir à une solution plus efficace...