IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

[VB.NET] Comment associer une Ombre à une Form?


Sujet :

Windows Forms

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut [VB.NET] Comment associer une Ombre à une Form?
    Bonjour,

    Tout est dit dans le titre, je cherche à créer une ombre sur une form, et une ombre paramétrable. Voici un logiciel incroyable, qui permet de rajouter une ombre paramétrable à toutes les fênetres de windows! Je vous invite à l'essayer!
    http://jazzmatazz.free.fr/YzShadow.rar

    Alors j'essaye de refaire la même chose que ce logiciel. Pour UNE form, la mienne... Voilà ce que je suis arrivé à faire, apres de LONGUES recherches (il n'y a pas grand chose sur le sujet ), en utilisant "SetClassLong" et la constante "CS_DROPSHADOW" qui ne marche que sous windowsXP (même pas NT!) et qui permet d'ajouter une ombre à une fenêtre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Declare Function SetClassLong Lib "user32.dll" Alias "SetClassLongA" (ByVal hWnd As IntPtr,ByVal nIndex As Integer,ByVal dwNewLong As Long) As Long
    Private Declare Function GetClassLong Lib "user32.dll" Alias "GetClassLongA" (ByVal hWnd As IntPtr, ByVal nIndex As Integer) As Long
     
    Private Const GCL_STYLE As Long = -26
    Private Const CS_DROPSHADOW As Long = &H20000
     
    Public Sub Ombre(Handle As IntPtr)
        Call SetClassLong(Handle,GCL_STYLE,GetClassLong(Handle, GCL_STYLE) Or CS_DROPSHADOW)
    End Sub
    Voilà, en appellant la fonction "Ombre" au démarrage de ma fenêtre, ça me créer une tout petite ombre autour de ma fenêtre:


    Mais voilà, je ne sais pas comment modifier son épaisseur, sa profondeur, son dégradé etc etc! Aucune documentation ne m'a été accessible! Je n'ai rien, mais rien trouvé... Pourtant le logiciel précédent permet toutes ces paramétrisations!

    Alors mes questions sont:
    - Selon vous, quelles technologie est utilisé dans le logiciel YzShadow pour créer des ombres autour des fênetres?
    - Si vous pensez qu'il sagit d'un dessin par des fonctions de GDIplus, est il possible de dessiner une bitmap à l'écran, mais pas dans une FORM, à l'éxtérieur d'une form?
    - Est il possible, avec la méthode que j'ai utilisé, de modifier les paramètres de mon ombre?

  2. #2
    Expert éminent
    Avatar de neguib
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 627
    Détails du profil
    Informations personnelles :
    Âge : 63
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 627
    Points : 7 879
    Points
    7 879
    Par défaut
    En fait je me demande si cela n'est pas nativement réalisable par la Classe CreateParams, notamment grâce à sa Propriété CreateParams.ClassStyle
    je n'ai pas le temps de tester mais je penses que la doc MSDN devrait déjà t'eclairer
    Pour le bien de ceux qui vous lisent, ayez à coeur le respect du forum et de ses règles

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Bon je suis arrivé à résoudre ce pb complétement de façon "tactique".

    Le pb était, et c'est un problème général de windowsXP:
    Comment afficher une Form avec des dégradé transparent, des ombres? ou comment de maniere générale prendre en considération dans une Form les nuances de transparence d'une image PNG avec le derrière de la Form?

    Alors j'ai écris un programme, qui fait une form à partir d'une image PNG!
    C'est à dire que à partir d'une image PNG classique, une Fenêtre s'ouvre, elle est découpé selon les pixels COMPLETEMENT transparent de la form.
    Ensuite, mon programme fait une impression d'écran de ce qu'il y a derrière la Form, le mélange à l'image PNG, et colorie l'arriere plan de la Form avec ce nouveau mélange!
    Le résultat est suprenant! En fait on à une form 100% opaque, mais qui recopie ce qui se trouve derriere elle! Regardez plutôt celà:



    L'icône de Meedio par dessus mon naviguateur Web, est affiché avec toutes ces nuances de transparence!!!! Et c est bien une Form par dessus la fenêtre de mon naviguateur..

    Le pb c'est que j'ai pas trop de temps là, j'ai un tas de trucs à dévelloper, et j'ai un peu la fleme de vous commenter le code
    Donc sachez que une partie du code est commenté ici:
    http://www.developpez.net/forums/vie...598226#2598226

    Et le reste vous devriez comprendre!
    Voici donc un fichier .rar avec les sources (je programme avec le framework 1.1 et sur shardevellop) et à l'intérieur le programme compilé pour pouvoir tester
    http://jazzmatazz.free.fr/test1.rar

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2004
    Messages
    1 027
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 1 027
    Points : 1 164
    Points
    1 164
    Par défaut
    C'est pas pour te casser ta joie mais j'ai testé ton appli, avec le framework 2.0. La form est pas du tout transparente et sa mange 400 Mo dans la ram :o

    Fin voila je voulais juste te le préciser.


    Si tu veux jeter un oeil : http://ns30826.ovh.net/~clement/perso/test.JPG

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Je confirme pour le pb de la mémoire Vive, en fait ça par de 30Mo, ça monte jusqu'à 400Mo, et ça retombe direct à 30Mo, pour remonter, etc etc...
    Le pb est que je rafraichit l'image avec un timer, toute les 100ms, car je n'ai pas cherché à utiliser un systeme de "hooks" pour intercepter les messages de Windows signalant un changement d'état de l'affichage.. Car cette application va mettre utile pour un plugin dans Meedio, et dans Meedio, j'interecepterai les messages de Meedio, pour rafraichir l'affichage de ma Form, en conséquence, suivant les "repaint" de meedio.. Donc j'enleverai le timer, et donc il y aura moins de pb de Ram...

    Ceci dit, en ce qui concerne la transparence, j'ai essayé le logiciel sur plusieurs PC, et celà marche! Je ne crois pas que ces PC avaient le framework 2.0, ils étaient plutot équipé du 1.1... Je te remercie de me signaler le pb, je regarderai sur un PC équipé du framework 2.0...

    EDIT: j'ai retester l'application mise en ligne au-dessus, sur mon PC ça marche impeccablement

  6. #6
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    ePox et moi même avons essayé de résoudre ce pb, et nous y sommes arrivé, la version à été corrigé, et mis en ligne, pour marcher à la fois sur un systeme avec le framework 1.1 et sur un systeme avec un framework 2.0...

    Le plus suprenant c'est que nous aurions découvert un léger bug dans le framework 1.1

    Alors que sous le framework2.0 les parties transparentes de l'image de background d'une Form laisserai entrevoir la couleur de background de la Form, une image de background sur une Form sous le framework1.1 aurait ces parties transparentes qui deviennent systématiquement noire, quelque soit la couleur de background de la Form

    Je vous laisse tester et cogiter cette remarque

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2005
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    J'ai trouvé bien mieux pour cette problèmatique
    http://www.developpez.net/forums/vie...asc&highlight=

    Enfin celà ne conderne pas l'ombre précisement, mais plutot comment dessiner des nuances de transparence sur une FOrm. Pour l'ombre, l'idée du premier post au-dessus, est la direction à suivre je pense...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 02/05/2006, 09h50
  2. [VB.NET] Comment peut-on sérialiser une Collection ?
    Par Jabbal'H dans le forum VB.NET
    Réponses: 6
    Dernier message: 09/03/2006, 21h24
  3. Réponses: 3
    Dernier message: 16/02/2006, 18h43
  4. [VB.NET] thread interrompu lors d'une fermeture de form ?
    Par HULK dans le forum Windows Forms
    Réponses: 3
    Dernier message: 30/01/2006, 15h00
  5. [MFC] comment associer 2 valeurs à une ComboBox
    Par drinkmilk dans le forum MFC
    Réponses: 2
    Dernier message: 13/04/2005, 11h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo