Fenêtre transparente (opacité réglable) en pur vb

Soyez le premier à donner votre avis sur cette source.

Vue 8 891 fois - Téléchargée 980 fois

Description

Parce que les API n'apportent pas grand chose à la compréhension de la prog, voici une fenêtre translucide à opacité variable codé en pur VB (donc, il faut s'armer de patience)...

Source / Exemple :


Private AutoChange As Boolean
Private BackCoul

Private Sub Form_Load()
 AutoChange = True
 Form1.Visible = True
 DoEvents
 BackCoul = Form1.Point(0, 0)
 AutoChange = False
 Call Affi
End Sub

Private Sub HScroll1_Change()
 If AutoChange = True Then Exit Sub
 Call Affi
End Sub

Private Sub Affi()
 If AutoChange = True Then Exit Sub
 AutoChange = True  'Evite la récursivité
 HScroll1.Enabled = False
 
 'Masque la fenêtre
 Fx = Form1.Left
 Fy = Form1.Top
 Form1.Visible = False
 DoEvents 'Petite pause pour le laisser faire ça...
 
 'Capture l'écran de l'intérieur de la fenêtre
 xForm = (Form1.Left / 15) + 3
 yForm = (Form1.Top / 15) + 22
 wForm = xForm + Form1.ScaleWidth
 hForm = yForm + Form1.ScaleHeight
 ScreenShoots1.ShootScreen xForm, yForm, wForm, hForm
 
 'Redimensionne le picturebox pour qu'il ait la taille
 ' de la fenêtre
 Picture1.Left = 0
 Picture1.Top = 0
 Picture1.Width = Form1.ScaleWidth
 Picture1.Height = Form1.ScaleWidth
 Picture1.Picture = ScreenShoots1.PictureImage
 Picture1.Visible = False
 
 'Réafiche la fenêtre
 Form1.Visible = True
 Form1.Left = Fx
 Form1.Top = Fy
 DoEvents
 
 'Copie pixel par pixel + opacité
  'Extrait les sub couleurs RVB de BackCoul
  BackB = BackCoul \ 65536
  BackV = (BackCoul - (BackB * 65536)) \ 256
  BackR = BackCoul - (BackB * 65536) - (BackV * 256)
 Opacite = HScroll1.Value
 For y = 0 To (Form1.ScaleHeight - 1)
  For x = 0 To (Form1.ScaleWidth - 1)
   'Récupère la couleur du pixel de la capture d'écran
   cc = Picture1.Point(x, y)
    Bleu = cc \ 65536
    Vert = (cc - (Bleu * 65536)) \ 256
    Rouge = cc - (Bleu * 65536) - (Vert * 256)
   'Calcul l'opacité selon pourcentage
   '0=BackColo 100=Capture
   CoulR = BackR - (((BackR - Rouge) / 100) * Opacite)
   CoulV = BackV - (((BackV - Vert) / 100) * Opacite)
   CoulB = BackB - (((BackB - Bleu) / 100) * Opacite)
   Form1.PSet (x, y), RGB(CoulR, CoulV, CoulB)
  Next x
 Next y
 
 AutoChange = False
 HScroll1.Enabled = True
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
D'accord avec toi ticomic et merci pour la note (ça fait du bien de se faire noter!!!)
Messages postés
57
Date d'inscription
mercredi 22 décembre 2004
Statut
Membre
Dernière intervention
29 avril 2005

Les sources qui ne recoivent pas de commentaires ne sont pas nécéssairement mauvais ou mal conçus, juste peut-être peu intéressantes (peut-etre je dis) du point de vue de quelqu'un qui .

Je me questionne aussi sur la touche Print Screen, et sur l'utilisation que VB en fait (oui, ca m'a fait * une fois). Quand on envoie la touche équivalente à print screen, elle est envoyée, mais ne fonctionne pas. Ca serait difficile de faire envoyer la fonction quand la touche est envoyée par Sendkey? Je ne crois pas mais bon, on ne peut pas tout avoir (surtout pas avec Microsoft).

Bravo pour ton code, bien pensé lol.
(Je suis le seul qui ose noter??) Aller, 8/10
Messages postés
1488
Date d'inscription
mercredi 5 février 2003
Statut
Membre
Dernière intervention
3 décembre 2007
22
VLAD : TOUTES MES EXCUSES.
Ceci dit, tu as eu tort de ne pas critiquer mon code qui est, il est vrai à chi.. (mais fo pas le dire ;)

DARKY : Je ne renie pas les API, mais comme l'a si bien dit "MoiOlivier" :
"de faire en VB ce qu'une API peut faire aussi, et ce dans le SEUL but de comprendre comment elle marche (l'API pour ceux qui ont suivi), de voir le principe de fonctionnement.
" bien entendu, dans la limite de ce qui est faisable.

Pour l'OCX c.f. mes autres sources. merci.

Bon, on va peut-être s'arrêter là parce qu'un code aussi minable ne mérite pas autant de commentaires (surtout quand on sait que mon povre ScreenShoot et PaintedBall n'en ont pas eut :((
Messages postés
285
Date d'inscription
mercredi 20 août 2003
Statut
Membre
Dernière intervention
13 février 2005

"les mecs comme vlad2i ne savent pas relativiser" je me demande ce que vaut cette affirmation gratuite (et fausse, me semble-t-il)...

Les API que je te proposais ne changent rien au code (et pour etre plus précis ca n'aurait fait que l'accelerer)

Quand à olivier, qui prétend "faire en VB ce qu'une API peut faire aussi" - se demande t il parfois comment fait VB ? VB utilise des API, alors tant qu'a faire autant les déclarer et les utiliser soi meme, d'autant plus que c'est parfois bien plus efficace.

Notez bien que je n'ai pas critiqué, en aucun moment, ce que ScSami a codé, je me suis contenté de proposer des améliorations possibles.

Notemment parce que ca peut vexer d'avoir un programme qui met un temps fou a dessiner des points.
Si on peut meme pas proposer des choses constructives sans avoir à se justifier... Où va-t-on hehe

Vlad
Messages postés
185
Date d'inscription
vendredi 20 décembre 2002
Statut
Membre
Dernière intervention
10 janvier 2008

manque l'ocx screenshot!
Afficher les 11 commentaires

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.