Click sur les controles windowless transparents...

Soyez le premier à donner votre avis sur cette source.

Vue 6 297 fois - Téléchargée 679 fois

Description

Encore un nom barbare, encore une mini source.

Ici, le but de ce mini controle utilisateur est de vous montrer comment il est possible de detecter un Clik dans la zone transparente d'un controle Windowless (comme le sont les labels, les lines, les images ou les shapes)

il suffit simplement de réagir à l'evenement HitTest pour informer VB de l'endroit où se trouve la souris.
Ainsi, on pourra lui dire que nous (le curseur) nous trouvons en dehors du controle, ou dessus... tant que le curseur est dans le "cadre" du controle, cela fonctionnera...

pas très clair ? faites un test... cliquez dans le cadre rouge ^^

Source / Exemple :


Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
    HitResult = vbHitResultHit
End Sub

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
18
Date d'inscription
mercredi 21 juillet 2004
Statut
Membre
Dernière intervention
19 mars 2014

salut Renfield

a tu une idée pour detecter un mouseout sur un control transparent?
Messages postés
102
Date d'inscription
lundi 29 décembre 2003
Statut
Membre
Dernière intervention
28 juin 2007

merci renfield de ton aide,
l'examen de ton code, bien qu'il ne réponde pas tout à fait à ce je cherche à faire m'a permis d'y voir plus clair.

voici ce que je propose:

propriete hitbehavior useregion
propriete clipbehavior none
---------------------------------------------------------
Option Explicit


Private Sub UserControl_Show()
With UserControl
.AutoRedraw = True
.DrawWidth = 1
UserControl.Line (1, 1)-(.ScaleWidth - 2, .ScaleHeight - 2), vbGreen
Set .MaskPicture = .Image

'permet de visualiser l'image créée
SavePicture .Image, App.Path & "\image.bmp"


.Cls
.AutoRedraw = False

.MaskColor = vbRed
.BackStyle = vbTransparent

End With
End Sub



Private Sub UserControl_HitTest(X As Single, Y As Single, HitResult As Integer)
Dim d As Single
Dim a As Single

a = UserControl.ScaleHeight / UserControl.ScaleWidth


'calcule de la distance du point à la droite
d = Abs((a * X - Y) / (Sqr(a ^ 2 + 1)))
If d < 5 Then
Screen.MousePointer = 5
Else
Screen.MousePointer = 0
End If

Debug.Print "d = " & d


End Sub

--------------------------------------------------------


dans tous les cas, je me rends compte que faire un controle pour l'utilisation que je souhaite en faire (traceur de courbe dans un repere) n'est pas judicieux. En effet, il faudrait dessiner des controles transparents sur l'intégralité du conteneur. Outre le problème de perte de performance (sans doute minime) il y aura plus grave car pour tracer plusieurs droites, il faudra superposer les controles transparents. Lequel recevra alors les évènements de la souris. Je vais opter pour une autre solution: tracer de courbes directement sur le picture avec objets associés.
merci encore de ton aide.

monsieurlémouche
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Merci pour ces précisions.

++
Moustachu
Messages postés
17288
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
27 septembre 2021
71
plus léger, moins de chose a gérer pour windows.

on ne dessiner pas en fait dans le Usercontrol, mais sur la fenetre parente, VB s'occupe de tout...

pour ca que les windowless sont forcément placés sous les autres controles
Messages postés
1079
Date d'inscription
jeudi 14 novembre 2002
Statut
Membre
Dernière intervention
1 janvier 2012

Salut,

Ah ben ça il fallait le savoir...Effectivement, tout est expliqué dans MSDN. C'est un peu magique comme fonctionnement.

Sinon ça sert à quoi un control "Windowless" en pratique ? Je veux dire : Qu'est ce que ça apporte par rapport aux controls "Window" ?

++
Moustachu

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.