Contour d'une Form arrondi [Résolu]

EvilGost 235 Messages postés lundi 16 décembre 2002Date d'inscription 16 mai 2011 Dernière intervention - 12 juil. 2007 à 19:51 - Dernière réponse : TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention
- 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 [;)]
Afficher la suite 

7 réponses

Répondre au sujet
cs_Jack 14010 Messages postés samedi 29 décembre 2001Date d'inscription 28 août 2015 Dernière intervention - 12 juil. 2007 à 19:57
0
Utile
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
Commenter la réponse de cs_Jack
EvilGost 235 Messages postés lundi 16 décembre 2002Date d'inscription 16 mai 2011 Dernière intervention - 13 juil. 2007 à 10:58
0
Utile
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 [;)]
Commenter la réponse de EvilGost
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 13 juil. 2007 à 11:44
0
Utile
Salut,

Regarde du côté des régions. C'est vraiment simple d'arrondir les bors d'une fenêtre avec ça.
Commenter la réponse de cs_rt15
cs_thephil 189 Messages postés mercredi 21 août 2002Date d'inscription 19 janvier 2011 Dernière intervention - 13 juil. 2007 à 11:47
0
Utile
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

--------------------------------------------------------------
**********************************************
Commenter la réponse de cs_thephil
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 13 juil. 2007 à 13:05
0
Utile
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
Commenter la réponse de TeBeCo
TeBeCo 467 Messages postés lundi 24 juin 2002Date d'inscription 9 mars 2011 Dernière intervention - 13 juil. 2007 à 13:07
0
Utile
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
Commenter la réponse de TeBeCo
EvilGost 235 Messages postés lundi 16 décembre 2002Date d'inscription 16 mai 2011 Dernière intervention - 13 juil. 2007 à 11:57
-2
Utile
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 [;)]
Commenter la réponse de EvilGost

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.