Détecter le déplacement d'un Usercontrol (Composant ActivX)

Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 25 nov. 2009 à 11:53
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 - 27 févr. 2012 à 09:01
Bonjour,
Je suis en train de faire un composant graphique (un Nieme bouton )
Je suis au tout début, je rends juste le contrôle complètement transaprent
avec la méthode StrechBlt. Et ca marche tres bien
Je retrace lors des evenements Resize, AmbiantChange, Paint

Cependant, mon control ne se retrace pas lorsque je le déplace (en mode édition par exemple) . Il faut fermer la denêtre d'édition puis la rouvrir (Resize+Paint) pour que le déplacement ai été pris en compte.

Quel est l'évènement qui dit que le control a été déplacé.

d'avance merci,

Le code de tracé de mon control :

Private Sub Tracer()
    'Gérer les dimensions et positions en fonction du scale mode du parent
    Dim m_top As Long   'mon haut dans le composant parent
        m_top = UserControl.ScaleY(UserControl.Extender.Top, UserControl.Parent.ScaleMode, vbPixels)
    Dim m_left As Long  'ma gauche dans le composant parent
        m_left = UserControl.ScaleX(UserControl.Extender.Left, UserControl.Parent.ScaleMode, vbPixels)
    
    'Remplir le composant avec ce qu'il y a dessous (transparence)
    Dim Res1 As Long
        Res1 = StretchBlt(UserControl.hdc, _
                                0, 0, _
                                UserControl.ScaleWidth, UserControl.ScaleHeight, _
                          UserControl.Parent.hdc, _
                                m_left, m_top, _
                                UserControl.ScaleWidth, UserControl.ScaleHeight, _
                          vbSrcCopy)
End Sub

3 réponses

Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
25 nov. 2009 à 14:49
pas de réponse
0
Chris1955 Messages postés 1 Date d'inscription mardi 30 mai 2006 Statut Membre Dernière intervention 13 février 2012
13 févr. 2012 à 11:36
Bonjour,

Un peu tard pour la réponse peut-être mais la solution est dans le subclassing: http://support.microsoft.com/kb/179398/fr

Tu dois appeler ta sub "Tracer" à partir de la fonction
"Friend Function WindowProc"

le message à intercepter est "WM_WINDOWPOSCHANGED" une constante dont
la valeur est &H47 (à déclarer dans le module)

Donc, la fonction se présentera comme ceci:

Friend Function WindowProc(ByVal hWnd As Long, _
ByVal uMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
If uMsg = WM_WINDOWPOSCHANGED Then call Tracer()
WindowProc = CallWindowProc(mWndProcOrg, hWnd, _
uMsg, wParam, ByVal lParam)
End Function

Cordialement

Chris
0
Flocreate Messages postés 300 Date d'inscription lundi 17 juillet 2006 Statut Membre Dernière intervention 27 mai 2012 3
27 févr. 2012 à 09:01
Bonjour, merci pour la réponse,
même tardive, elle est la bienvenue.
0
Rejoignez-nous