Event quand la form bouge (subsclassing)

Soyez le premier à donner votre avis sur cette source.

Vue 4 454 fois - Téléchargée 330 fois

Description

Grâce au subclassing, on peut savoir lorsque l'utilisateur déplace la fenêtre

Source / Exemple :


' ###################
' # Dans une form nommée Form1
' ###################
Private Sub Form_Load()
    HookForm1
    Show 0
End Sub

Private Sub Form_Unload(Cancel As Integer)
    UnHookForm1
End Sub

' ###################
' # Dans un module
' ###################

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)

Public Const WM_MOVE = &H3

Public OldProc As Long

Sub HookForm1()
    OldProc = SetWindowLong(Form1.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub

Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Select Case uMsg
        Case WM_MOVE
        Form1.Caption = "Heure du dernier déplacement : " & Time
    End Select
    WindowProc = CallWindowProc(OldProc, hwnd, uMsg, wParam, lParam)
End Function

Sub UnHookForm1()
    Call SetWindowLong(Form1.hwnd, GWL_WNDPROC, OldProc)
End Sub

Conclusion :


Avant de débuguer, tester, ... ma source. merci de lire l'article sur le subclassing (si vous ne voulez pas faire plater votre VB) :
http://vbfrance.com/article.aspx?Val=5226

Codes Sources

A voir également

Ajouter un commentaire Commentaires
vbmore Messages postés 18 Date d'inscription mercredi 3 avril 2002 Statut Membre Dernière intervention 8 mars 2004
12 janv. 2003 à 18:01
Y' a un exemple de trackmouseevent sur API-Guide (www.allapi.net)
Alan71 Messages postés 530 Date d'inscription lundi 3 juin 2002 Statut Membre Dernière intervention 13 juin 2004
12 janv. 2003 à 15:09
pour ceux ki le sav' pas, C ossi posible de fer un event mouse_leave (avec l'api trackevent).

G pas de kod' sous la main, mé bon !
cs_Clem Messages postés 282 Date d'inscription dimanche 1 avril 2001 Statut Membre Dernière intervention 12 février 2007
4 janv. 2003 à 13:44
oui je connaissait déjà, mais c'est bien de le dire et d'en faire profiter les autres qui connaissent pas !!!
mais je voudrais savoir si tu sais comment faire un hook sur un exe ou une dll et non une fenêtre ?
matrey Messages postés 399 Date d'inscription jeudi 31 janvier 2002 Statut Membre Dernière intervention 6 septembre 2004
4 janv. 2003 à 13:23
pas mal...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.