supinfo
Ouverture de  SUPINFO USA à San Francisco en 2008. Des études en informatique en Californie à un tarif abordable ! Inscrivez-vous dès maintenant !
supinfo
Connexion :

Recherche

  
   Tout| Actus| Télécharger| Comparateur de prix| Dossiers| Forums| Jeux| Google

2 messages
ok

Timer sur un clic. - Ou comment se prendre la tête en VB..

Bonjour à tous !

Dans le cadre d'un stage, j'ai été chargé de modifier certaines parties du code d'un progiciel en VB. Une des modifications est que lors d'un click pour séléctionner une adresse, un message s'affiche pour indiquer que pour séléctionner une adresse, il faut double-clicker sur celle-ci.

Grâce à l'aide d'autres forumers, voici à quoi je suis arrivé :

Function TimerFonction(durée)
Dim fin As Boolean
fin = durée = 0
Do While Not fin
fin = Timer > debut + durée
DoEvents ' Passe le contrôle à d'autres processus.
Loop
TimerFonction = Timer - debut ' Durée totale.
End Function

Private Sub DataGridAdr_Click()
Dim R
debut = Timer
R = TimerFonction(3) '= 3 secondes...
If R >= 3 And debut > 0 Then
MsgBox "Pour séléctionner, veuillez faire un double clic sur l'adresse souhaitée." 'puisque le temps imparti au double clic est dépassé
Else
Exit Sub
End If
End Sub

Private Sub DataGridAdr_DblClick()
debut = 0
R = TimerFonction(0)
On Error Resume Next
Effacer_Adresse
With DataGridAdr
LblNumDossier.Caption = .Columns(0).Value
CboTypeAdr.Text = .Columns(1).Value
TxtRueAdr.Text = .Columns(2).Value
TxtCPAdr.Text = .Columns(3).Value
TxtVilleAdr.Text = .Columns(4).Value
CboPaysAdr.Text = .Columns(5).Value
LblNumAdr.Caption = .Columns(6).Value
End With
End Sub

(debut est déclaré en public dans un module)

Le problème est que le message disant qu'il s'agit d'un click apparaît bien lors d'un click, mais apparaît également après un double-click..

Quelqu'un saurait pourquoi le message du simple click apparaît aorès un double-click ??

Merci !! :)
 
 
Dans un module :

Code :
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Private Const WM_LBUTTONDOWN = &H201
Dim oldProc As Long
Public Sub Subclass(m_hWnd As Long)
    oldProc = SetWindowLong(m_hWnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Public Sub UnSubclass(m_hWnd As Long)
    SetWindowLong m_hWnd, GWL_WNDPROC, oldProc
End Sub
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    WindowProc = CallWindowProc(oldProc, hwnd, uMsg, wParam, lParam)
    If uMsg = WM_LBUTTONDOWN Then
        Call ProcessClick
    End If
End Function

Private Function TimerFonction(ByVal duree As Long)
Dim fin As Boolean
    
    fin = duree = 0
    Do While Not fin
        fin = Timer > debut + duree
        DoEvents ' Passe le contrôle à d'autres processus.
    Loop
    TimerFonction = Timer - debut ' Durée totale.
    
End Function

Private Sub ProcessClick()
Dim R As Long
    
    debut = Timer
    R = TimerFonction(3) '= 3 secondes...
    If R >= 3 And debut > 0 Then
        MsgBox "Pour séléctionner, veuillez faire un double clic sur l'adresse souhaitée." 'puisque le temps imparti au double clic est dépassé
    Else
        Exit Sub
    End If
    
End Sub

Private Sub DataGridAdr_DblClick()
    
    debut = 0
    R = TimerFonction(0)
    On Error Resume Next
    
    'Effacer_Adresse
    'With DataGridAdr
    '    LblNumDossier.Caption = .Columns(0).Value
    '    CboTypeAdr.Text = .Columns(1).Value
    '    TxtRueAdr.Text = .Columns(2).Value
    '    TxtCPAdr.Text = .Columns(3).Value
    '    TxtVilleAdr.Text = .Columns(4).Value
    '    CboPaysAdr.Text = .Columns(5).Value
    '    LblNumAdr.Caption = .Columns(6).Value
    'End With
    
End Sub



Dans la form principale :

Code :
Private Sub Form_Load()
    Call Subclass(Text1.hwnd)
End Sub

Private Sub Form_Unload(Cancel As Integer)
    Call UnSubclass(Text1.hwnd)
End Sub


Surtout : à ne pas lancer depuis l'IDE de VB.
 
 
 
2 messages
ok
 
Vous devez être connecté pour écrire un message !
 

 Sujets Similaires:


 
Clubic.com
 
Achetez-facile.com
 
Jeuxvideo.fr
 
neteco.com
 
mobinaute.com