EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 mai 2011
-
12 juil. 2007 à 19:51
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDerniè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?
EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 mai 20112 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...
cs_thephil
Messages postés189Date d'inscriptionmercredi 21 août 2002StatutMembreDernière intervention19 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
TeBeCo
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDerniè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
Messages postés467Date d'inscriptionlundi 24 juin 2002StatutMembreDerniè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
EvilGost
Messages postés235Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention16 mai 20112 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.