Contour d'une Form arrondi

Résolu
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 - 12 juil. 2007 à 19:51
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011 - 13 juil. 2007 à 13:07
Bonjour à tous,

Je suis en .NET et j'ai une form sans bordures (FormBorderStyle=none), donc je n'ai plus de bordures et de controlbox, car j'aimerai moins même faire ma propre forme avec les boutons de mon choix. J'ai, cependant, créer des images donnant l'impression d'avoir les bordures de la form arrondies (un peu comme windows live messenger), mais quand je lance l'appli, on voit du blanc aux 4 coins de l'application (on voit la background de la form).

Je souhaiterai obtenir ce résultat: http://evilgost.free.fr/bordure.JPG
Savez-vous comment faire pour que l'on voit plus le fond de la form rectangulaire?

Merci beaucoup pour votre aide

EvilGost [;)]

7 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
12 juil. 2007 à 19:57
Salut
Tu tapes "forme arrondie" dans le moteur de recherche du site + case à cocher ".Net uniquement" et tu auras quelques sources qui en parlent

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
13 juil. 2007 à 10:58
Effectivement, il y a 3 source sur VBFrance, malheureusement, l'une n'est pas adapté, le deuxieme n'a rien a voir,et la troisieme ne fonctionne pas...c'est pour ca que je poste ici, je n'arrive pas à trouver de source qui fonctionne...

EvilGost [;)]
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
13 juil. 2007 à 11:44
Salut,

Regarde du côté des régions. C'est vraiment simple d'arrondir les bors d'une fenêtre avec ça.
cs_thephil Messages postés 189 Date d'inscription mercredi 21 août 2002 Statut Membre Dernière intervention 19 janvier 2011
13 juil. 2007 à 11:47
j'ai eu à faire un programmeau forme original, j'ai fait ça à l'aide de la transparence (cherche ce terme sur le forum).
En fait il te suffis d'appliquer la transparence à ta form, et si tu as par exemple une image possée sur cette form, ta form prendra les contours de l'image !

voilà le code, qui vient d'ici si je me souviens bien, donc merci à son auteur !
par contre c'est du vb6 !!! donc à adapter certainement si tu es en .net....

dans un module
-----------------------------------------------------------------------------
Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const RGN_OR = 2

Public Function MakeRegion(picSkin As PictureBox) As Long
   
    ' faites une fenêtre "région" basée sur une picture de picture box
    ' Ceci ce fait en passant l'image pixel par pixel et en créant une
    ' région pour chaque pixel non transparent
    ' Le code est optimisé, il est donc assez rapide
   
    Dim X As Long, Y As Long, StartLineX As Long
    Dim FullRegion As Long, LineRegion As Long
    Dim TransparentColor As Long
    Dim InFirstRegion As Boolean
    Dim InLine As Boolean
    Dim hDC As Long
    Dim PicWidth As Long
    Dim PicHeight As Long
   
    hDC = picSkin.hDC
    PicWidth = picSkin.ScaleWidth
    PicHeight = picSkin.ScaleHeight
        InFirstRegion True: InLine False    X Y StartLineX = 0
   
    ' Ici, la couleur de transparence est basé sur le pixel en haut a gauche
    ' Mais vous pouvez mettre la couleur ke vous voulez
    TransparentColor = GetPixel(hDC, 0, 0)
   
    For Y = 0 To PicHeight - 1
        For X = 0 To PicWidth - 1
                        If GetPixel(hDC, X, Y) TransparentColor Or X PicWidth Then


                If InLine Then
                    InLine = False
                    LineRegion = CreateRectRgn(StartLineX, Y, X, Y + 1)
                   
                    If InFirstRegion Then
                        FullRegion = LineRegion
                        InFirstRegion = False
                    Else
                        CombineRgn FullRegion, FullRegion, LineRegion, RGN_OR


                        DeleteObject LineRegion
                    End If
                End If
            Else
                If Not InLine Then
                    InLine = True
                    StartLineX = X
                End If
            End If
        Next
    Next
   
    MakeRegion = FullRegion
End Function
--------------------------------------------------------------
**********************************************
puis dans ton forma load, tu rajoutes un truc du genre :
--------------------------------------------------------------

Dim WindowRegion As Long
   
'Propriétés de la picture box
    Picture1.AutoRedraw = True
    Picture1.AutoSize = True
    Picture1.BorderStyle = 0
    Picture1.ScaleMode = 3


    'Position de la picture box     Picture1.Top 0: Picture1.Left 0


    '"Découpe" la form suivant Picture1
    WindowRegion = MakeRegion(Picture1)
    SetWindowRgn Me.hWnd, WindowRegion, True

--------------------------------------------------------------
**********************************************

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
13 juil. 2007 à 13:05
le pb de transparency key c'est que tu peux pas la mettre a transparent car la classe Form ne l'accepte pas comme etant possible donc si tu voulais joué avec les nuance de couleur ca marchera pas ... (et l'opacité a rien a voir des fois que qqun tente :p)
de manière plus general il est GRANDEMENT prérable de ne pas passer par une couleur et un transparencykey juste pour des coin arrondi mais de directement manier les region GDI avec des forme ou/et des graphicpath ca lui evite deja de dependre d'un fichier externe d'etre plus lent de prendre plus de RAM ect ....

et pour "thephil" vu que tu est passé en vb.net oublie les API windows pour faire du GDI presque tout existe en Managé dans le framework 0 API pour joué avec les regions c'est deja tout defini dans System.Drawing.
il suffit de créé 4 droites et 4 arc de cercle ca fait 8 ligne et c'est reglé

TeBeCo
TeBeCo Messages postés 467 Date d'inscription lundi 24 juin 2002 Statut Membre Dernière intervention 9 mars 2011
13 juil. 2007 à 13:07
et encore je suis en train de me demander si en definissant les arc il demandera pas le point de depart et l'angle auquel cas il relirais les arc entre eux donc si tu les fait dans l'ordre ca ferai jsute les 4 definitions des 4 angles et c'est tout

TeBeCo
EvilGost Messages postés 235 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 16 mai 2011 2
13 juil. 2007 à 11:57
Et bien en fait, après de multiples recherche, je viens de trouver une solution, en .NET, c'est vraiment tout con, mais bon, faut le savoir.
Il suffit de sélectionner le formulaire, et de mettre la propriété BackColor = Red. Ensuite, toujours dans les propriétés de la form, mettez TransparencyKey à Red.
Lancez l'appli et hop , tout ce qui est rouge est transparent.

Merci à Jack, RT5 et ThePhil pour votre aide ;)

EvilGost [;)]
Rejoignez-nous