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

Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
- - Dernière réponse : Flocreate
Messages postés
307
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
Afficher la suite 

3 réponses

Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
0
Merci
pas de réponse
Commenter la réponse de Flocreate
Messages postés
1
Date d'inscription
mardi 30 mai 2006
Statut
Membre
Dernière intervention
13 février 2012
0
Merci
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
Commenter la réponse de Chris1955
Messages postés
307
Date d'inscription
lundi 17 juillet 2006
Statut
Membre
Dernière intervention
27 mai 2012
3
0
Merci
Bonjour, merci pour la réponse,
même tardive, elle est la bienvenue.
Commenter la réponse de Flocreate