Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

MOUSEOUT ET MOUSEOVER SUR LES CONTROLES WINDOWLESS TRANSPARENTS


Information sur la source

Catégorie :Control Classé sous : Control, Windowless, transparent, mouseout, mouseover Niveau : Débutant Date de création : 10/10/2008 Date de mise à jour : 11/10/2008 13:35:06 Vu / téléchargé: 1 022 / 115

Note :
Aucune note

Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

Description

control windowless qui permet de prendre en charge les evenement mouseout et mouseover

je me suis inspiré des codes de  Renfield
http://www.vbfrance.com/codes/CLICK-SUR-CONTROLES-WINDOWLESS-TRANSPARENTS_42562.aspx
http://www.vbfrance.com/codes/TUTORIEL-OCX-BASIQUE_32545.aspx

plus d'info sur les controls masqués:
http://support.microsoft.com/kb/185882/fr

ce code utilise des api windows pour detecter la position de la souris et  un timer pour detecter la sortie de la souris.
j'ai essayé avec setcapture sur le control parent . pour l'instant ca ne marche pas tres bien
NB les declaration des api sont dans un module de base
 

Source

  • 'Control masqué qui repond aux evenement mouseout et mouseover
  • '-------------------------------------------------------------
  • '.windowless=true
  • '.backstyele=0
  • '.backcolor=&H000000FF&
  • '.maskcolor=&H000000FF&
  • '.scalemode=vbpixels
  • Option Explicit
  • Private Over As Boolean 'flag permet de ne pas repercuter l'evenement plusieur fois
  • Public Event Click()
  • Public Event MouseOver()
  • Public Event MouseOut()
  • '## Evenement Timer
  • 'permet de verifier à interval la position de la souris par rapport au control
  • Private Sub Timer1_Timer()
  • Dim PT As POINTAPI 'coordonées X,Y de la souris en pixel
  • Dim h As Long 'handle de la fenetre parent
  • Dim left As Long, right As Long, top As Long, bottom As Long ' position du control en pixel
  • Dim rc As RECT
  • GetCursorPos PT 'renvoi la position de la souris par rapport à l'ecran
  • h = WindowFromPoint(PT.X, PT.Y) ' renvoie le handle du conteneur lorsque le control est windowless
  • ScreenToClient h, PT 'convertie la position de la souris par rapport au conteneur
  • 'position du control par rapport au conteneur en pixel
  • 'note: le conteneur doit exposé une propriete ScaleMode
  • left = UserControl.ScaleX(UserControl.Extender.left, Parent.ScaleMode, vbPixels) 'position gauche en pixel
  • right = left + UserControl.ScaleHeight 'position droite en pixel
  • top = UserControl.ScaleY(UserControl.Extender.top, Parent.ScaleMode, vbPixels) ' position haut en pixel
  • bottom = top + UserControl.ScaleHeight 'position bas en pixel
  • If PT.X < left Or PT.X > right Or PT.Y < top Or PT.Y > bottom Then 'compare les coordonnée de la souris à la position du control
  • UserControl.BackStyle = 0
  • RaiseEvent MouseOut 'la souris est sorie
  • Timer1.Interval = 0 ' desactive le timer
  • Over = False 'met à jour le flag
  • End If
  • End Sub
  • '## Evenement UserControl
  • Private Sub UserControl_Initialize()
  • Over = False 'initialise le flag
  • End Sub
  • 'Se produit dans un contrôle utilisateur sans fenêtre en réponse à l'activité de la souris.
  • Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
  • HitResult = vbHitResultHit ' demande au programme de repondre à l'activité de la souris
  • ' plus d'info HitResultConstants dans l'explorateur d'objet
  • End Sub
  • Private Sub UserControl_Click()
  • RaiseEvent Click
  • End Sub
  • Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
  • If Not Over Then
  • UserControl.BackStyle = 1
  • RaiseEvent MouseOver
  • Over = True 'la souris est entrée
  • Timer1.Interval = 5 'active le timer . control de la position de la souris toute les 5ms
  • End If
  • End Sub
  • Private Sub UserControl_Show()
  • If Ambient.UserMode Then
  • UserControl.BackStyle = 0 'transparent en mode execution
  • Else
  • UserControl.BackStyle = 1 'opaque en mode création
  • End If
  • End Sub
'Control masqué qui repond aux evenement mouseout et mouseover
'-------------------------------------------------------------

'.windowless=true
'.backstyele=0
'.backcolor=&H000000FF&
'.maskcolor=&H000000FF&
'.scalemode=vbpixels
Option Explicit

Private Over As Boolean 'flag permet de ne pas repercuter l'evenement plusieur fois

Public Event Click()
Public Event MouseOver()
Public Event MouseOut()

'## Evenement Timer
'permet de verifier à interval la position de la souris par rapport au control
Private Sub Timer1_Timer()
    Dim PT As POINTAPI 'coordonées X,Y de la souris en pixel
    Dim h As Long 'handle de la fenetre parent
    Dim left As Long, right As Long, top As Long, bottom As Long   ' position du control en pixel
    Dim rc As RECT
    GetCursorPos PT 'renvoi la position de la souris par rapport à l'ecran
    h = WindowFromPoint(PT.X, PT.Y) ' renvoie le handle du conteneur lorsque le control est windowless
    
    ScreenToClient h, PT 'convertie la position de la souris par rapport au conteneur
    
    
    'position du control par rapport au conteneur en pixel
    'note: le conteneur doit exposé une propriete ScaleMode
    left = UserControl.ScaleX(UserControl.Extender.left, Parent.ScaleMode, vbPixels) 'position gauche en pixel
    right = left + UserControl.ScaleHeight 'position  droite en pixel
    top = UserControl.ScaleY(UserControl.Extender.top, Parent.ScaleMode, vbPixels) ' position haut en pixel
    bottom = top + UserControl.ScaleHeight 'position bas en pixel
       
    If PT.X < left Or PT.X > right Or PT.Y < top Or PT.Y > bottom Then 'compare les coordonnée de la souris à la position du control
        UserControl.BackStyle = 0
        RaiseEvent MouseOut 'la souris est sorie
        Timer1.Interval = 0 ' desactive le timer
        Over = False 'met à jour le flag
    End If
    
End Sub

'## Evenement UserControl

Private Sub UserControl_Initialize()
Over = False 'initialise le flag
End Sub

'Se produit dans un contrôle utilisateur sans fenêtre en réponse à l'activité de la souris.
Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
    HitResult = vbHitResultHit ' demande au programme de repondre à l'activité de la souris
                               ' plus d'info HitResultConstants dans l'explorateur d'objet
End Sub

Private Sub UserControl_Click()
    RaiseEvent Click
End Sub

Private Sub UserControl_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Not Over Then
    UserControl.BackStyle = 1
    RaiseEvent MouseOver
    Over = True    'la souris est entrée
    Timer1.Interval = 5 'active le  timer . control de la position de la souris toute les 5ms
End If

End Sub

Private Sub UserControl_Show()
    If Ambient.UserMode Then
        UserControl.BackStyle = 0 'transparent en mode execution
    Else
        UserControl.BackStyle = 1 'opaque en mode création
    End If


End Sub

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

10 octobre 2008 22:08:51 :
rectification de la description
11 octobre 2008 13:35:06 :
correction des bogues dus au scalemode le conteneur du control Hidden doit exposé une proprité scalemode

Commentaires et avis

signaler à un administrateur
Commentaire de Renfield le 11/10/2008 08:28:09 administrateur CS

Dim left, right, top, bottom As Long
ici, left, right et top sont des variant. bottom est le seul Long

gaffe, ton controle gère mal le ScaleMode de la Form.
si on passe de Twips à pixels, ca coince...


Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

User Control Transparent avec degré de transparence [ par Afyn ] Bonjour, j'ai rouvé du code pour rendre une Form transparente, ainsi que ses Controls fils d'ailleurs, mais je n'ai pas réussi a faire fonctionner ce Control richtextbox transparent attaché a sa form [ par adess00 ] Bonjour Je voudrai savoir comment faire pour rendre ma richtextbox transparente.J ai trouv&#233; des sources mais le probleme est que la richtextbox d transparence d'un control sur un backgroundimage d'une form [ par Adn56 ] Re salut all,Comme dis dans le titre je n'arrive pas à faire en sorte qu'un control soit rendu transparent sur l'image d'arriére plan de la form ! Il OCX arrière plan transparent [ par peug ] Bonjour,Comment rendre un arrière plan d'un control transparent ?J'ai refait un control FRAME mais j'aimerai qu'il puisse avoir l'arrière plan transpa Control Hérité personalisé [ par XGuarden ] Bonjours, je cré un control hérité de la textbox et je désire ajouter quelleque propriété au controle. Pas de probleme pour les propriété en général. Transparence animation Flash (.swf) [ par Didier72 ] Hello,Voilà j'utilse dans une form transparente une animation Flash (.swf) avec ShockwaveFlash.Sous VB6 en cochant l'option: Transparent, cette animat Control avec onglets [ par ratala ] Bonjour tout le monde :)Est-ce que quelqun connait un control pour gerer des onglets sympa ? Comment faire un alphablend(rendre transparent) un controle [ par prendtonuzi ] Comment donnez la transparence à une listbox par exemple? une idée? merci. UserControl: comment obtenir la propriété BackStyle=Transparent comme dans un Label [ par vicosta ] Salut,Je contacte qu'on peut cliquer sur un Label avec sa propriété backstyle=transparent, et qu'il réagit aux events MouseDown, Click, etc (dans un F Contrôle component monotype [ par OneHacker ] Je fait un control qui ne peut avoir qu'un seul type de control et en vérifiant avec GetType mais je ne sais pas accéder à cette fonction. Par example


Nos sponsors

Sondage...

CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.