1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
Attribute VB_Name = "MFormPerso"
'======================================================================================
'======================================================================================
'Utilisation :
' -Mettre la propiété BorderStyle de la Form à 0.None
' -Créer une PictureBox (disons Picture1 pour l'exemple)
' -Mettre l'image de la Form personnalisée dans la PictureBox
' -Mettre la propriété Visible de la PictureBox à False
' -Mettre la ligne suivante dans l'évènement Load de la feuille :
'MakeForm Me, Picture1, Couleur
'Picture1 : Nom de la boite contenant l'image
'Couleur : A remplacer par la valeur Long de la couleur de transparence
' ex : bleu : RGB(0,0,255)
'======================================================================================
'======================================================================================
Option Explicit
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Const RGN_OR = 2
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Sub ReleaseCapture Lib "user32" ()
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Public Declare Function timeGetTime Lib "winmm.dll" () As Long
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Function MakeForm(frm As Form, pic As PictureBox, lngColor As Long)
Dim lngC2ITimer As Long
Dim lngX As Long, lngY As Long
Dim lngXDeb As Long, lngYDeb As Long
Dim lngXFin As Long, lngYFin As Long
Dim hRgn As Long, hRgnTemp As Long
Dim lngDummy As Long
Dim bStat As Boolean
lngC2ITimer = timeGetTime
frm.Picture = pic.Picture
pic.ScaleMode = 3
frm.ScaleMode = 3
pic.AutoRedraw = True
frm.Width = frm.ScaleX(pic.Width, vbPixels, vbTwips)
frm.Height = frm.ScaleY(pic.Height, vbPixels, vbTwips)
DoEvents
bStat = False
For lngX = 0 To pic.ScaleWidth
bStat = False
For lngY = 0 To pic.ScaleHeight
If bStat Then
If pic.Point(lngX, lngY) = lngColor Then
lngXFin = lngX
lngYFin = lngY
If hRgn = 0 Then
hRgn = CreateRectRgn(lngXDeb, lngYDeb, lngXFin + 1, lngYFin)
Else
hRgnTemp = CreateRectRgn(lngXDeb, lngYDeb, lngXFin + 1, lngYFin)
lngDummy = CombineRgn(hRgn, hRgn, hRgnTemp, RGN_OR)
DeleteObject hRgnTemp
End If
bStat = False
End If
Else
If pic.Point(lngX, lngY) <> lngColor Then
lngXDeb = lngX
lngYDeb = lngY
lngXFin = lngX
lngYFin = lngY
bStat = True
End If
End If
Next
Next
lngDummy = SetWindowRgn(frm.hwnd, hRgn, True)
lngDummy = DeleteObject(hRgn)
End Function |
Partager