CLICK SUR LES CONTROLES WINDOWLESS TRANSPARENTS...
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012
-
4 mai 2007 à 10:40
cs_medkarim
Messages postés18Date d'inscriptionmercredi 21 juillet 2004StatutMembreDernière intervention19 mars 2014
-
10 oct. 2008 à 00:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
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
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
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 4 mai 2007 à 11:44
Merci pour ces précisions.
++
Moustachu
Renfield
Messages postés17287Date d'inscriptionmercredi 2 janvier 2002StatutModérateurDernière intervention27 septembre 202174 4 mai 2007 à 11:35
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
cs_moustachu
Messages postés1079Date d'inscriptionjeudi 14 novembre 2002StatutMembreDernière intervention 1 janvier 2012 4 mai 2007 à 10:40
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" ?
10 oct. 2008 à 00:57
a tu une idée pour detecter un mouseout sur un control transparent?
5 mai 2007 à 16:34
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
4 mai 2007 à 11:44
++
Moustachu
4 mai 2007 à 11:35
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
4 mai 2007 à 10:40
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