begin process at 2008 07 06 18:33:25
1 205 717 membres
280 nouveaux aujourd'hui
14 119 membres club

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 !

FORM GRAPHIQUE AUX BORDURES IRREGULIERES STYLE WIDGET


Information sur la source

Catégorie :Formulaire Source .NET ( DotNet ) Classé sous : widget, png, transparence, alpha Niveau : Débutant Date de création : 28/03/2006 Date de mise à jour : 05/03/2007 08:48:11 Vu / téléchargé: 9 928 / 2 119

Note :
9,29 / 10 - par 7 personnes
9,29 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

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

Description

Bonjour,

Voici une class qui pourra sûrement en aider plus d'un.

C'est une partie du code du logiciel "Meteo Fusion" : http://www.eggiz.org/meteo-fusion/
Ce bout de code vous permet de créer une form à partir d'une image transparente au format PNG

Le code original (en C#) n'est pas de moi, il vient de CodeProject :
http://www.codeproject.com/cs/media/perpxalpha_sharp.asp

Je n'ai donc pas beaucoup de mérite, j'ai simplement retranscrit le C# en VB, mais j'ai eu du mal à trouver cette méthode, alors je la poste ici pour la faire connaître par le plus de monde.

Conclusion

Pour reparler de mon logiciel de météo, si ça vous intéresse de participer au développement, écrivez-moi par le formulaire de contact de mon site.
Merci à Charles Racaud alias Kenji (http://www.vbfrance.com/auteurdetail.aspx?ID=231472) qui m'a bien aidé sur ce projet.
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

05 mars 2007 08:48:11 :
modification de la description
  • signaler à un administrateur
    Commentaire de TOTOCHITO le 29/03/2006 09:01:44

    c'est dommage tout est fait en 2005 maintenant

  • signaler à un administrateur
    Commentaire de eldim le 29/03/2006 09:51:51

    Super chouette

    ça ne supporte que le png ?

  • signaler à un administrateur
    Commentaire de spy166 le 29/03/2006 13:11:22

    @TOTCHITO : C'est l'avenir que veux tu :)

    @ELDIM : Oui, ça ne supporte que le png. Il n'y a pas d'intérêt à supporter d'autres format car à ma connaissance, seul le png permet des dégradés de transparence.

  • signaler à un administrateur
    Commentaire de Pym Corp le 29/03/2006 13:27:15

    Sympa de répondre pour moi !
    --> Totochito c'est fait en 2005, mais le code doit être compatible avec .NET 1.x en théorie
    --> Merci Eldim ! Oui ça ne supporte que le png (le meilleur format image au monde selon moi ^^)
    --> spy166 : Faut il y'a aussi le format mng, en gros un png animé. Mais il n'est pas supporté par grand chose encore, voir ici pour plus d'infos : http://fr.wikipedia.org/wiki/Multiple-image_Network_Graphics

    @+

  • signaler à un administrateur
    Commentaire de TOTOCHITO le 29/03/2006 16:26:02

    ouhai je sais bien mais tout le monde ne l'a pas en revanche ça va venir bientot pour ma part

  • signaler à un administrateur
    Commentaire de MaToun le 03/04/2006 11:14:08

    Bravo ! Tres beau !! Code un peu plus complexe que les autres code de détourages vus Ici !

  • signaler à un administrateur
    Commentaire de dvdstory le 03/04/2006 23:09:00

    Pour moi aussi je trouve que le PNP est le meilleur format d'image et comme par hasard c'est un format Open-Source.
    Grand Merci à la Communauté Open Source.
    Human knowledge belongs to the world

  • signaler à un administrateur
    Commentaire de Icarius44 le 20/04/2006 17:17:35

    Super, c'est rapide, c'est beau! bon travail ;)

  • signaler à un administrateur
    Commentaire de Benz le 04/06/2006 15:57:59

    C'est très sympa en effet. Ca doit permettre de faire des soft super sympa au niveau design (comme ton appli méteo).

    Pourrais tu ajouter quelques commentaires dans le module pngForm.vb s'il te plait.

    En fait, j'ai beaucoup de mal à adapter ton code. Au lieu de créer un nouveau form avec un fond en png, dépourvu de tout contrôle, je voudrais que le fond d'un form existant (contenant des contrôles) soit un png.

    Je ne suis pas certain d'avoir été très clair, mais quelques commentaires seraient le bienvenus.
    En tout cas, merci pour cette contribution.

  • signaler à un administrateur
    Commentaire de renocmoa le 08/06/2006 09:52:35

    Super efficace et pratique mais je debute et suis un simple bricoleur et j'aimerais aussi savoir comment ajouter des controles...

    si qqun peut m'aider ou me dire comment (ou avec quoi) je peux faire des formulaires perso, c'est visiblement complexe mais je suis sûr qu'il y une solution...

    merci

  • signaler à un administrateur
    Commentaire de Pym Corp le 08/06/2006 15:50:36

    Benz --> Pour les commentaires dans pngForm.vb je ne vais pas en ajouter, c'est tout un tas de d'appel aux API pour la plupart pour créer une fenêtre de style Layer, il n'y a pas vraiment grand chose à commenter. C'est juste qu'il faut que ça soit comme celà sinon ça ne marche pas, après qu'est-ce qui fait quoi exactement, je ne sais pas.

    Et sinon la solution pour ajouter des controles c'est de faire vos propres objets graphiques réagissants à la souris et au clavier et de les dessiner sur la form ou encore d'utiliser ceux existant en appelant le refresh de chaque controle à chaque évènement utilisateur interargissant avec les controles en question.

  • signaler à un administrateur
    Commentaire de Benz le 08/06/2006 16:03:08

    Merci Pym, ok pour les commentaires.
    Par contre, pour les contrôles, je ne vois pas du tout comment faire.

    Lorsque tu crée un form, tu le vois à l'écra, et tu peux poser des controles dessus, mais dans ton exemple, le form est généré automatiquement, donc tu ne peux rien mettre dessus. N'y a t'il pas une solution pour ne pas générer le form par le code mais plutôt appliquer le skin à un form créé avec le menu ? Tu vois ce que je veux dire ?

  • signaler à un administrateur
    Commentaire de Pym Corp le 08/06/2006 16:18:57

    Oui je vois mais on ne peut pas. Le truc à faire est de créer ta form, puis ajouter par le code les controles et leurs événements recpectifs.

    Ce n'est pas simple ni pratique, mais si tu trouves un meilleur moyen fait moi signe :)

  • signaler à un administrateur
    Commentaire de Benz le 08/06/2006 16:23:40

    C'est ce que je voulais éviter justement.
    Mettre deux ou trois contrôles sur un form de ce type ça peut aller, mais faire une appli complète de cette façon, c'est galère.

    Je n'ai pas de solution (pas assez de pratique en .net et sur VB en général), dommage parce que ça donne vraiment un résultat excellent. Quoi qu'il en soit, je suis persuadé qu'il existe une façon d'appliquer un skin en PNG (avec différents niveaux de transparence pour les dégradés d'ombre)... reste à la trouve :-)

    En tout cas merci de ta contribution, ça permettra peut être de faire avancer les choses.
    Si jamais je trouve un truc, j'essaierais de penser à mettre un nouveau post ici.

  • signaler à un administrateur
    Commentaire de jmenfous le 23/06/2006 13:34:11

    Pardon d'avance de répondre sans avoir pris le temps de tester (gros manque de temps).

    Si vous créez dynamiquement votre form, la solution pourrait être de créer une form normale avec vos control puis de créer la form skinable en héritant de votre form.

    Simple proposition, je vais voir la source dès que j'aurai un peu de temps à moi.

  • signaler à un administrateur
    Commentaire de Benz le 23/06/2006 13:57:19

    Si tu arrives à faire ça ou si tu as un exemple, ton aide sera la bienvenue :-)

  • signaler à un administrateur
    Commentaire de jmenfous le 23/06/2006 15:09:43

    J'ai pris un peu de temps pour tester une form héritée de votre pngForm,... et ça marche, enfin pas vraiemnt comme je voudrais.

    J'ai modifié pngForm avec le code suivant

    #If CONFIG = "Debug" Then
        Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
            Get
                Return MyBase.CreateParams
            End Get
        End Property
    #Else
        Private Const WS_EX_LAYERED As Integer = &H80000
        Protected Overrides ReadOnly Property CreateParams() As System.Windows.Forms.CreateParams
            Get
                Try
                    Dim cp As CreateParams = MyBase.CreateParams
                    cp.ExStyle = cp.ExStyle Or WS_EX_LAYERED
                    Return cp
                Catch ex As Exception
                    Return MyBase.CreateParams
                End Try
            End Get
        End Property
    #End If

    Pour que ce code ne soit pas pris en compte lors du débugage, cepandant apres génration à mon grand regret Visual gadre CONFIG sur realese. Rien de génant il faut juste relancer le debug avant de voualoir à nouveau toucher à ses forms hérités de pngForm. donc ça marche, mais à mon gout ce n'est pas encore ça car ça donne un aire de travail pas fini.

    Bon résultat on peut créer des forms héritée de pngForm et ajouter des controls.
    Mauvaise nouvelle, les controls sont bien présents, et bien à leur place mais ils semble dessinés sous le skin... si quelqun à une idée?

  • signaler à un administrateur
    Commentaire de Pym Corp le 23/06/2006 15:12:54

    Oui c'était ça le problème que j'ai essayé de vous dire.
    Ils sont bien là mais on ne les voit pas :|

  • signaler à un administrateur
    Commentaire de jmenfous le 23/06/2006 15:37:12

    Et bien je conirme alors que la creaton dynamique ne solutionne pas le souci car par l'utilisation d'un formulaire herite, les controls cont crees apres le formauleri... pas cool, pas cool.

    Et dans la serie des mauvaises nouvelles, j'ai regarde de pres les apis qui sont utilses ici et je suis mort de rire... enfin rire jaune. Ils s'agit deja de methodes que j'ai exploite en vb6 et je n'ai jamais trouve le moyen de separer le layout de la form ni meme le pointeur qui represente la feuille(HWND) de ses controls. Donc a mon niveau c'est sans suite, so sorry le rendu des contour etait tellement sympas :-/

  • signaler à un administrateur
    Commentaire de Geekspirit le 26/11/2006 12:13:17

    Salut, j'ai travaillé toute la nuit sur le code et je n'ai pas trouvé de solution pour ses controls invisible. Je voit que cela fait deja un bon petit moment que vous avez arreter de chercher, mais j'insiste en disant que ce code est vraiment extra et fournit des qualité pour des application skinable grandiose. Ma demande serai de continuer à chercher si le coeur vous en dit. Aussi j'aimerais pouvoir acceder au code de météo fusion car le lien est cassé et n'est plus accessible. Si vraiment il n'y a aucun moyen ou que personne ne veut se repoencher sur le problème, passé moi svp un exemple avec les solutions que dit Pym Corp le 08/06/2006 15:50:36. Merci à vous de maccorder du temps. Bon code à vous.

  • signaler à un administrateur
    Commentaire de Pym Corp le 21/02/2007 19:46:34

    Je retombe ici par hasard parce que j'ai justement repris le développement de Meteo Fusion depuis peu ( http://forum.crystalxp.net/index.php?showtopic=16529 )

    Geekspirit je n'avais pas du tout vu ce message ni celui dans mes MP... As tu trouvé une solution a ton problème depuis tout ce temps ?

  • signaler à un administrateur
    Commentaire de pifou25 le 13/03/2007 16:11:34

    c'est interessant cet exemple! moi l'ennui que j'ai c'est que ça marche pas du tout si j'insère ce formulaire dans un MDI... je comprend pas du tout pourquoi :/ sinon tel quel c'est super ça ouvre des portes :)

  • signaler à un administrateur
    Commentaire de bolandfranck le 14/03/2007 08:40:24

    Pym Corp >> J'ai trouvé certaine méthode mais ce code m'a aider a comprendre beaucoup de chose. Depuis je me suis lancé sur la création de mes propres control même si j'ai beaucoup de mal. Avec l'arrivée de vista je trouve qu'il serait vraiment bien de créer des control  paramétrable  "dans tous les sens" Faite moi signe svp si vous avez des codes a proposer. Merci

  • signaler à un administrateur
    Commentaire de neo022 le 15/07/2007 00:49:59

    Bonjour tout le monde!!
    Je suis ravi de vous annoncer que j'ai trouvé le moyen d'ajouter des controls sur cette magnifique PNG form :D
    Le code reste a perfectionner mais le gros y est notament qd on reduit et maximise ca peche un peu mais bon la
    je poste ca comme ca je modifier en meme tps chez moi donc bon ^^ si jamais je trouve le truc qui va pile poil
    je reposterais ^^.
    j'avoue c'est vraiment barbare! mais bon ca marche ^^
    J'explique rapidement le principe puis je met un peu de code
            
    Tout d'abord on a 3 form
    Demarrage (qui peux disparaitre après)
    pngform
    fc (formulaire contenant les controls)

    La form "Demarrage" va, avec un bouton ou n'importe quoi d'autre créer la pngform.
    Rien a toucher ou presque dans le code de la pngForm en effet on veux juste une image qui sera la fond de notre application.
    Une fois la pngForm créer on crée la form qui contien tout nos controls (la fc) et c'est la que ca se corse un peu.
    Sur cette form vous devez lui appliquer une couleur de fond qui sera transparente
    donc par exemple le fushia:
    ajouter se code au chargement de fc :

            Me.BackColor = Color.Fuchsia
            Me.TransparencyKey = Color.Fuchsia

    En gros qd la form va s'afficher les controls "floteront" sur du transparent
    Maintenant y a plus qu'a caller la fc sur la png form.
    Les 2 form doivent avoir imperativement la meme taille!

    Sur la form de demarrage
    Private pngF As pngForm
    Private ctrlF As fc
    Private Sub Fc_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            pngF = New pngForm() 'creation de la pngForm
            ctrlF = New Form1(pngF) 'ici on lui envoi donc la nouvelle adresse de la form png pour pouvoir l'utiliser (la deplacer la re activer qd on reduit etc...)
    End Sub

    et sur le bouton:

            pngF.SetBitmap(CType(System.Drawing.Bitmap.FromFile(Application.StartupPath & "\Pictures\connect_splash.png").Clone, Bitmap))
            pngF.Top = Me.Top
            pngF.Left = Me.Left
            ctrlF.Top = Me.Top
            ctrlF.Left = Me.Left
            pngF.Show()
            ctrlF.Show()

    Sur la form fc:

    public pngFrm as pngForm 'en variable globale c'est le plus pratique ici on aura donc la variable en parametre du new
    Public active as integer = 0
    Public Sub New(ByRef pngF As pngForm)

            ' Cet appel est requis par le Concepteur Windows Form.
            InitializeComponent()
            ' Ajoutez une initialisation quelconque après l'appel InitializeComponent().
            pngFrm = pngF
            pngFrm.fc = Me 'et la je passe a la pngform l'adresse de la nouvelle form1 celle ou je suis actuellement

    End Sub

    Private Sub Form1_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
            If active = 2 Then
                maf.Activate()
                Exit Sub
            End If
            Me.Refresh()
            pb1.Refresh()
    End Sub

    Private Sub Form1_LocationChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.LocationChanged
            pngFrm.Top = Me.Top
            pngFrm.Left = Me.Left
    End Sub

    Private Sub Form1_MouseLeave(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.MouseLeave
            active = 2
    End Sub

    Private Sub desktopForm_MouseDown(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
            If e.Button = Windows.Forms.MouseButtons.Left Then
                ReleaseCapture()
                SendMessage(Me.Handle.ToInt32, WM_NCLBUTTONDOWN, HTCAPTION, 0)
            End If
    End Sub

    et maintenant sur la pngform
    il faut rajouter ceci au debut

    Public Class pngForm 'code original
        Inherits Form 'code original
        Private ctrlF As fc 'code à rajouter

    'c'est ici que le code merdouille un peu ca marche une fois sur 2
    Private Sub pngForm_Activated(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Activated
            ctrlF.active = 0 'ici je passe la variable de fc qui s'appelle active je lui donne comme valeur 0
            ctrlF.Activate() 'maintenant que le fond est reactiver j'active les controls
    End Sub

    voila je crois que j'ai fait le tour.
    C'est une astuce qui permet de pas trop trop galéré. Si vous avez des soucis a me comprendre se qui est fort probable :D
    n'hésiter pas a m'envoyer un mail avec en objet: Source pngForm comme ca je comprendrais.

    Bon courage a tous!

  • signaler à un administrateur
    Commentaire de Pym Corp le 17/07/2007 13:03:08

    En utilisant deux forms il y a un moyen beaucoup plus simple !

    Il suffit de mettre quelque chose comme :
    Form1.Owner = Me

    et ensuite dans l'évènement Move de la form principale tu peux rajouter :
    Form1.Location = Me.Location

  • signaler à un administrateur
    Commentaire de neo022 le 22/07/2007 16:45:29

    Lol je connaissais pas cela :D ca parait plus simple mais bon j'ai fait comme ca donc je v pas tout rechanger maintenant j'ai un peu la fleme mais pour les autres ca peut etre une piste

  • signaler à un administrateur
    Commentaire de stefsouron le 22/10/2007 12:35:19

    Salut, j'ai cherché pendant longtemps un code permettant de faire cela, et ça marche très bien. Néanmoins, j'aimerais aller plus loin, et nottament j'ai essayé de travailler sur un redimentionnement du bitmap, sans succés. Quand on joue sur le paramètre size de UpdateLayeredWindow, on change non pas la taille du bitmap mais de son rectangle d'affichage (le bitmap est donc rogné si on réduit).

    J'ai alors cherché dans les propriétés de la classe Bitmap pour le redimentionner avant de le passer à UpdateLayeredWindow, mais voilà, ses propriétés Size, Width et Height sont readonly.

    Quelqu'un connait-il une méthode simple (et rapide en temps machine) pour redimentionner un objet de classe bitmap ? Je suis sûr que cela doit exister dans les apis standart.

    Merci

  • signaler à un administrateur
    Commentaire de stefsouron le 24/10/2007 11:46:06

    Après de nombreux essais et recherches, je sèche toujours pour le redimensionnement de la pngForm. J'ai posté ce que j'avais fait sur le forum API, pour essayer d'obtenir de l'aide, voir ici : http://www.vbfrance.com/infomsg_FORMS-AVEC-TRANSPARENCE-PIXEL-PROBLEMES-AVEC-GDI_1025911.aspx

  • signaler à un administrateur
    Commentaire de stefsouron le 24/10/2007 19:39:15 10/10

    Ca y est j'ai résolu le problème du redimensionnement. Vous pourrez trouver le code ici :
    http://www.vbfrance.com/codes/FORMS-SKINNABLES-STYLE-WIDGET-VB2005_44495.aspx

    Merci à tous.

Ajouter un commentaire

Discussions en rapport avec ce code source

Pub



Appels d'offres

WEB DESIGN
Budget : 1 000€
Plugin Dialer outlook
Budget : 2 000€
Travail graphique- ill...
Budget : 1 000€

CalendriCode

Juillet 2008
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Téléchargements

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

Boutique

Boutique de goodies CodeS-SourceS