Transparence grace à la souris

Résolu
yannou24 Messages postés 27 Date d'inscription lundi 12 septembre 2005 Statut Membre Dernière intervention 1 février 2006 - 25 sept. 2005 à 01:36
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 25 sept. 2005 à 14:05
Bonjour à tous !

Voila mon pb :

Sur une form, j'ai une picturebox (avec une image, cela va de soi...) mais je voudrais que tout le formulaire soit entièrement caché par un voile noir. La dessus, je voudrais pouvoir créer un curseur de souris de forme ronde qui permettrait de lever le voile noir à l'endroit ou il se trouve. Autrement dit, le curseur pourrait correspondre à un disque de rayon 1cm par exemple et permettrait de voir la partie de la picturebox qui se trouve sous le voile noir. on deplace la souris et on peut ainsi voir ce qui se trouve derriere le voile noir... Voila j'espère que je me suis bien fait comprendre, je sais que c'est pas évident !!!!!!

Je sèche dessus depuis 3 jours, sans dormir ni manger (ou presque) et je suis limite désepéré. J'appelle au secours si quelqu'un pense que c'est possible.

Merci par avance

[mailto:Y@nn Y@nn]

4 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 sept. 2005 à 14:05
re,
voici l'idée :


Const LWA_COLORKEY = &H1
Const LWA_ALPHA = &H2
Const GWL_EXSTYLE = (-20)
Const WS_EX_LAYERED = &H80000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, _
ByVal dwFlags As Long) As Long
'
Const MaCouleur As Long = 654654
'
'
Private Sub Form_Load()
Dim Ret As Long
ScaleMode = 3
Ret = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
Ret = Ret Or WS_EX_LAYERED
SetWindowLong Me.hWnd, GWL_EXSTYLE, Ret
SetLayeredWindowAttributes Me.hWnd, MaCouleur, 128, LWA_COLORKEY
End Sub
'
'
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
Circle (X, Y), 30, MaCouleur
End If
End Sub


<SMALL> Coloration syntaxique automatique [AFCK]</SMALL>


PCPT
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 sept. 2005 à 12:35
salut,
sous VB6 (?), si la solution voulue peut ne fonctionner que sous XP, je te propose ceci :
place une Form devant celle dont tu parles.
au mousemove, peind la Form (brosse) d'une couleur que tu rends invisible (SetLayer...)

çà me parraît être une solution ;)
ne fonctionne que sous W2K+

PCPT
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 20
25 sept. 2005 à 12:44
Salut,

Une petite piste, les api SetWindowRgn et CreateEllipticRgn. Malheureusement, je n'ai pas d'exemple de code sous la main.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
yannou24 Messages postés 27 Date d'inscription lundi 12 septembre 2005 Statut Membre Dernière intervention 1 février 2006
25 sept. 2005 à 12:55
merci pour ta reponse pcpt !
peux tu m'en dire un petit peu plus. Je ne maitrise pas bien ta solution; comment faire pour ne changer en couleur invisible qu'un petite partie de mon formulaire c'est à dire celle qui se trouve dans un rayon déterminée autour du pointeur de la souris ? Parce que j'aimerais qu'en déplacant la souris, ce qui a été découvert se recouvre tout de suite....

Merci de me répondre

Y@nn
0
Rejoignez-nous