Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

FENETRE AUX CONTOURS PERSONNALISABLES PAR SIMPLE SÉLECTION D'UN MASQUE BMP


Information sur la source

Catégorie :API Classé sous : contours, fenetre, fenêtre, bordures, masque Niveau : Initié Date de création : 07/03/2006 Date de mise à jour : 09/03/2006 16:35:46 Vu / téléchargé: 5 533 / 1 325

Note :
9,44 / 10 - par 9 personnes
9,44 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note

Description

Cliquez pour voir la capture en taille normale
Bon, alors je sais, je sais, y a déjà beaucoup de sources ici qui traitent de ce problème... Moi aussi j'ai passé du temps à chercher un code simple pour faire ça... mais il n'y a pas de source qui fait ce que je propose ici, c'est-à-dire définir les contours de la form simplement en donnant une image qui correspond à ce que vous voulez afficher, et une autre (le masque) qui sert à définir les zones qui seront apparentes et celle qui seront non-apparentes (c'est-à-dire des vides, des trous).

J'ai testé :
- http://www.vbfrance.com/codes/FORME-IRREGULIERE-TOTORIAL_1218.aspx qui marche parfaitement, mais ne permet de faire que des rectangles ou ellipses...
- http://www.vbfrance.com/codes/FORM-BORDS-IRREGULIERS-TRANSPARENCE-PARIR-IMAGE-PRATIQUE-POUR-SKINS_975.aspx, qui ressemble à ce que je veux faire mais il y a un petit problème dont je ne connais pas l'origine (des traits blancs horizontaux là où ça devrait être vide)
- http://www.vbfrance.com/codes/TOUREIFFEL_1268.aspx qui correspond tout à fait à ce que je veux faire mais qui est difficilement évolutif : pour faire la même chose avec une autre image, il faut y passer du temps...
- bien d'autres...

Bon, là j'ai fait n'importequoi en mettant simplement une image, c'est totalement sans intéret mais cela sert simplement à démontrer ce qu'il est possible de faire... Le code est ultra simple comparé aux sources que je viens de citer, simple par sa longueur (création du masque de la form en 5 lignes) et par sa compréhension aisée.
Laissez aller votre imagination pour créer de vraies forms, contenant des controles et du code derrière, je pense qu'on peut faire des trucs bien farfelus avec ça...

NE METTEZ PAS VOTRE MASQUE EN JPG, car la transparence serait mal faite, vu que jpg modifie légèrement la couleur de certains pixels...
 

Source

  • '*****************************************************
  • ' Ce petit dessin est de... nessie !!! ^^
  • ' Visitez son site : http://www.monkeymadness.org
  • '*****************************************************
  • '****************************** MEGA IMPORTANT ***************************************
  • '***** Mettre la propriété Autoredraw de votre PictureBox "Mask" à True
  • '***** (si vous voulez tenter de reproduire ceci en partant d'un projet vide)
  • '***** PAS DE MASQUE EN JPG
  • ZIP ZIP ZIP
'*****************************************************
'     Ce petit dessin est de... nessie !!! ^^
'  Visitez son site : http://www.monkeymadness.org
'*****************************************************

'****************************** MEGA IMPORTANT ***************************************
'***** Mettre la propriété Autoredraw de votre PictureBox "Mask" à True
'***** (si vous voulez tenter de reproduire ceci en partant d'un projet vide)

'***** PAS DE MASQUE EN JPG

ZIP ZIP ZIP

Fichier Zip

Pour les "Membres Club", vous pouvez télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip

Historique

09 mars 2006 00:41:56 :
Alors voilà, j'ai corrigé ce que vous m'avez conseillé : - plus de controle MoveForm vu qu'il ne servait à rien - On ne charge qu'une seule image, celle du masque. Elle est ensuite copiée dans form.picture + UN NOUVEAU CODE DE CREATION DU MASQUE ENCORE PLUS SIMPLE QUE LE PRECEDENT !!!!! Déjà que le précédent était assez court, là, nonseulement c'est encore plus court (5 lignes), mais c'est aussi 100 fois plus facile à comprendre !!
09 mars 2006 16:35:46 :
Voila, à présent il faut mettre l'image dans form.picture, ce qui permet de mettre des contrôles sur la form plus facilement. L'image se copie automatiquement dans le picturebox lors de l'exéction. La seule chose qui justifie l'existence du masque est que GetPixel(Me.hDC, 0, 0) ne fonctionne pas (alors que GetPixel(Mask.hDC, 0, 0) fonctionne). O_o De plus, pour faire plaisir à schtroumpft2301, la form se met aux dimensions de l'image ^^ + petite MAJ sans importance pour mettre à jour la partie "Description" de mon code étant donné que à présent mon code n'est plus tiré de http://www.vbfrance.com/codes/ACCES-POP3-NOMBRE-MESSAGE_541.aspx mais de moi-même !

Commentaires et avis

signaler à un administrateur
Commentaire de _120_ le 07/03/2006 22:34:11

Je me suis aperçu qu'il manque quelque chose à ce programme mais je ne sais pas comment faire :

Comment faire pour qu'il apparaisse dans la barre des tâches ??? Parce que le fait de mettre BorderStyle à 0, ça engendre qu'il n'apparaît pas dans la barre des tâches.

Comment faire ?

signaler à un administrateur
Commentaire de Willi le 07/03/2006 22:47:55 administrateur CS

Bonsoir,
Barre de tâches -> Propriété ShowInTaskBar de ta form à True !
Je vais aller jeter un petit coup d'oeil à ta source maintenant...

Bonne continuation.

signaler à un administrateur
Commentaire de schtroumpft2301 le 07/03/2006 23:18:59

Bonjour,

Pas mal du tout, j'avais fait un truc pour obtenir un résultat similaire il y a quelques temps (http://www.vbfrance.com/codes/CREER-REGIONS-COMPLEXES-POUR-FEUILLE_35461.aspx), mais j'avoue que ton idée est plus rapide à mettre en oeuvre que la mienne.

Pour que ton prog soit visible dans la barre des tâches après avoir mis BorderStyle à 0, il faut que tu place ensuite la propriété ShowInTaskbar à True. Le fait de mettre BorderStyle à 0 la place automatiquement sur False, à toi donc de modifier ensuite cette valeur (même chose pour les boutons d'agrandissement ou de réduction lorsque tu place BorderStyle à 1 (FixedSingle).

@+

signaler à un administrateur
Commentaire de schtroumpft2301 le 07/03/2006 23:20:46

Bonsoir,

Pour la barre de tache, Oup's, j'ai pas été assez rapide !

@+

signaler à un administrateur
Commentaire de f8bpz le 08/03/2006 08:32:12

Salut,
Vraiment excellent, je suis ravi, c'est exactement ce que je cherchais. Jusqu'alors je n'avais réussi qu'à faire des formes simples (carrés,triangles,ellipses) mais maintenant je n'ai plus de limites. Un grand merci donc...

@+

signaler à un administrateur
Commentaire de zerozen le 08/03/2006 11:33:37

Salut,
Très bon code.
A+

signaler à un administrateur
Commentaire de schtroumpft2301 le 08/03/2006 13:23:08

Bonjour,

Après quelques petits essais, je puis suggérer ceci :

Le Label MoveForm n'est pas vraiment nécessaire, il suffit de placer le même code dans l'évenement Form_MouseDown pour obtenir le même résultat, alors qu'avec le Label on ne peut plus avoir accès aux évenements souris sur la fenêtre.

Ceci dit, celà n'enlève rien à la qualité de ce programme qui rest exellent.

@+

signaler à un administrateur
Commentaire de wholehog2 le 08/03/2006 14:49:12

c'est génial est simple, maisn je cherche à convertir ton code en visual basic.net mais je n'y arrive pas.

quelqu'un sait il le faire ?

signaler à un administrateur
Commentaire de Egyde le 08/03/2006 20:38:00

Effectivement très bon code. 9/10

Je confirme l'inutilité du label MoveForm. D'autre part, il est également possible de n'avoir qu'une seule image (ie picturebox vide donc programme plus léger après compil.).
Grossièrement, ça donnerait
...
    Mask.Picture = Form1.Picture
    lngTransColor& = GetPixel(Mask.hDC, 0, 0)
...
avec dans Form1.Picture l'image "masquée".

signaler à un administrateur
Commentaire de _120_ le 08/03/2006 23:42:59

Ok pour le label moveform, c'est vrai qu'il est inutile.

Ok aussi pour le fait de n'avoir qu'une seule image, c'est tout con pourtant... pourquoi j'y ai pas pensé ??!!  ;)

Thx pour vos commentaires

signaler à un administrateur
Commentaire de _120_ le 09/03/2006 00:43:56

Voila, je viens de poster mon nouveau code, qui est d'une simplicité encore plus enfantine et qui présente aussi l'avantage de faire beaucoup moins galérer le pc lors d'un déplacement de la fenêtre et la traînée moche lors d'un déplacement est beaucoup plus faible !

J'espère que ça vous plaît maintenant !

signaler à un administrateur
Commentaire de Egyde le 09/03/2006 08:02:42

C'est fou! Où est passé le code |o|??
Encore bravo.

signaler à un administrateur
Commentaire de f8bpz le 09/03/2006 08:31:35

Salut,
Beaucoup plus simple en effet mais moins pratique je trouve...
En effet, si on se sert de cette méthode pour faire une zone de travail aux formes agréables, il faudra placer des boutons, des labels, .....
Dans l'ancienne source c'était facile pour placer tout ces éléments car le mask était représenté sur la forme. Tandis que maintenant on doit le faire un peu au pif. Car si on place tout ces objets sur le masque, ils se retrouvent dans la picture box et n'apparaissent pas à l'éxécution.
Donc pour ma part je continue d'utiliser l'ancienne source qui est excellente.
(ou alors il y a une autre possibilité, je suis à l'écoute)

@+

signaler à un administrateur
Commentaire de _120_ le 09/03/2006 09:33:01

F8BPZ, met la picturebox de coté, met l'image de ton masque dans form.picture (comme dans l'ancienne version), puis place tes controles, et enfin enlève l'image de form.picture au moment de compiler l'exécutable !

La nouvelle source est nettement plus avantageuse quand meme : as tu essayé de charger un wallpaper comme image avec l'ancienne source ? Moi ça a mi 30sec avant de créer le masque et quand j'ai voulu déplacer la fanêtre, j'ai du reboot mon pc :S ... alors qu'avec celle-ci, meme avec un wallpaper la masque se crée en un claquement de doigt et pour déplaceer la fenetre c'est parfaitement fluide

signaler à un administrateur
Commentaire de f8bpz le 09/03/2006 09:40:05

En effet _120_, je n'y avait même pas pensé, comme quoi j'ai bien fait de poster mon commentaire !
(ce n'est pas parcequ'on charge une source qu'on ne doit plus réfléchir, hihi).
Je vais donc appliquer cette méthode.
Merci encore

signaler à un administrateur
Commentaire de schtroumpft2301 le 09/03/2006 14:53:11

Bonjour,

Superbe !
Ca c'est du léger.
Afin éviter le souci que nous explique F8BPZ donc de voir tous les contrôles à la création, on peut placer l'image du masque sur la Form et ne rien mettre dans le PictureBox (Mask) puis le positionner aux coordonnées 0 ,0 de la Form avec pour dimensions 120 x 120 twips donc tout petit.
On peut également mettre la Form juste aux dimensions de l'image.
Ensuite dans Form_Load on met uniquement ce code :
Mask.Picture = Me.Picture
CreateMask

@+

signaler à un administrateur
Commentaire de schtroumpft2301 le 10/03/2006 22:16:08

Bonsoir,

Encore une solution SANS le PictureBox !
On peut encore simplifier le code et supprimer carrément le PictureBox Mask ainsi que la procédure CreateMask.
Il suffit de placer la propriété BackColor de la Form à la couleur que l'on veut transparente sur l'image (ici le vert).
Supprimer la déclaration GetPixel devenue inutile.

Dans Form_Load uniquement ceci :

    Dim Attrib As Long
    Attrib = GetWindowLong(frmMain.hwnd, -20)
    SetWindowLong frmMain.hwnd, -20, Attrib Or &H80000
    SetLayeredWindowAttributes frmMain.hwnd, BackColor, 0, 1

Et ça marche !!!

Encore merci pour ce code génial.

@+

signaler à un administrateur
Commentaire de stuntman_91 le 03/06/2007 00:51:07

Bonsoir,

Je voulais savoir si il était possible de gérer en même temps une transparence, plus ou moins importante, de la form, dans sa totalité ? Et donc de pouvoir "découper" les contours de la form et donner un aspect transparent à la form?
@+

signaler à un administrateur
Commentaire de stuntman_91 le 03/06/2007 02:17:57

Arf désolé je viens de comprendre!
dans
"SetLayeredWindowAttributes frmMain.hwnd, BackColor, 0, 1"
il me semble qu'il suffit de remplacer le 0 par une valeur comprise entre 0 et 255 (du transparent vers l'opaque) et de mettre 3 à la place de 1
++

signaler à un administrateur
Commentaire de MadM@tt le 02/10/2008 18:48:45

ah ouais comme quoi il se sont vraiment embêtés les autres !

Merci pour l'astuce

Ajouter un commentaire

Discussions en rapport avec ce code source dans le forum

Comment fermer une fenêtre Internet Explorer ? [ par Michael ] Qqn peut me dire comment n'avoir qu'une seule fenetre internet explorer ?C'esst à dire si une deuxième fenetre s'ouvre, je voudrais la fermer Merci be Comment fermer une fenêtre Internet Explorer ? [ par Michael ] Qqn peut me dire comment n'avoir qu'une seule fenetre internet explorer ?C'esst à dire si une deuxième fenetre s'ouvre, je voudrais la fermer Merci be Ancrer une fenêtre fille dans une fenêtre mère [ par chelchel ] Bonjour, Je cherche à ancrer une fenetre fille dans la fenetre mère. (Ancrer fait aussi réference à dockable).Je cherche a positionner automatiquement Mauvaise Nouvelle... pour ceux qui veulent incorporer ("encapsuler") une fenetre Externe à VB dans une fenêtre VB(formulaire) [ par jockos ] C'est le but que je m'étais fixer...1) Je lance mon programme VB 2) Je lance un exécutable (prenons l'exemple de NotePad) à partir de mon programme VB fenetre transparente [ par ThePsychowizard ] J'aimerais créer une fenêtre "transparente", c'est à dire qu'on voit le tour et la barre de titre, mais qu'elle n'a pas de "fond".J'avais pensé faire Fenetre durant l'execution [ par jthersen ] Salut à vous,J'ai un problème, chaque fois que je créédes programme VB de traitement d'information,donc des programmes qui vont traiter bcpd'élément à Cacher une fenetre DOS [ par mevincent ] Je shell sous VB un *.exe de ma composition. Une fenêtre Dos apparaît. Est-il possible de cacher cette fenêtre pendant que cette application travaill application mono fenêtre [ par Solanis ] Bonjour,Excusé le titre maisje savais pas comment décrire mon sujet en si peu de mots!!!Bon j'explique brièvement. j'ai une application Faire une capture "d'écran" d'une fenêtre qui est recouverte [ par azerty25 ] Hello allJe me suis demandé comment faire pour capturer l'image d'une fenetre qui n'est pas visible car recouverte par une autre (mais pas confon FENETRE ACTIVE [ par yoarf ] Bonjour,Je développe en vb Access. Je fais appel et j'ouvre un document Excel. Celui-ci donc s'affiche. Ainsi le fichier Excel devient la fenêtre acti


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,421 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.