cdc_sickle
asked on
Form Background
If this is possible, how can i make the background of the form, the desktop, so the app would be like see-thru. Thanx!
ASKER
This did not work
it compiled the program but the bg was still grey
it compiled the program but the bg was still grey
Load the WIN.INI file to get the background, then:
sub form1_load
form1.picture = "(the picture)"
end sub
Ask me if you have any questions.
sub form1_load
form1.picture = "(the picture)"
end sub
Ask me if you have any questions.
Hi
Is very much possible. There are two ways to do this.
First one (sometimes it doesn't work) is mentioned in MSDN in Topic "Transparent Control".
In the second approach U have to store the backround (just before your form get displayed) as DIB & display it on form_activate event. I am sure U can get code for this whole process from MSDN again. But keep in mind that there are lot of problems involved like palette handling on 256 colors palette, changing image when form move to new place or resized.
Is very much possible. There are two ways to do this.
First one (sometimes it doesn't work) is mentioned in MSDN in Topic "Transparent Control".
In the second approach U have to store the backround (just before your form get displayed) as DIB & display it on form_activate event. I am sure U can get code for this whole process from MSDN again. But keep in mind that there are lot of problems involved like palette handling on 256 colors palette, changing image when form move to new place or resized.
ASKER
That form1.picture "(the picture)"
did not make the background of the form trans.
did not make the background of the form trans.
ASKER
That form1.picture "(the picture)"
did not make the background of the form trans.
did not make the background of the form trans.
Here is code to make a form transparent :
' *** Make form transparent
Declare Function CombineRgn Lib "GDI32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Declare Function CreateRectRgn Lib "GDI32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Const RGN_AND = 1
Public Const RGN_COPY = 5
Public Const RGN_DIFF = 4
Public Const RGN_OR = 2
Public Const RGN_XOR = 3
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Sub MakeFormTransparent(frm As Form)
' *** Make a form transparent
Dim rctClient As RECT, rctFrame As RECT
Dim hClient As Long, hFrame As Long
' *** Grab client area and frame area
GetWindowRect frm.hWnd, rctFrame
GetClientRect frm.hWnd, rctClient
' *** Convert client coordinates to screen coordinates
Dim lpTL As POINTAPI, lpBR As POINTAPI
lpTL.x = rctFrame.Left
lpTL.y = rctFrame.Top
lpBR.x = rctFrame.Right
lpBR.y = rctFrame.Bottom
ScreenToClient frm.hWnd, lpTL
ScreenToClient frm.hWnd, lpBR
rctFrame.Left = lpTL.x
rctFrame.Top = lpTL.y
rctFrame.Right = lpBR.x
rctFrame.Bottom = lpBR.y
rctClient.Left = Abs(rctFrame.Left)
rctClient.Top = Abs(rctFrame.Top)
rctClient.Right = rctClient.Right + Abs(rctFrame.Left)
rctClient.Bottom = rctClient.Bottom + Abs(rctFrame.Top)
rctFrame.Right = rctFrame.Right + Abs(rctFrame.Left)
rctFrame.Bottom = rctFrame.Bottom + Abs(rctFrame.Top)
rctFrame.Top = 0
rctFrame.Left = 0
' *** Convert RECT structures to region handles
hClient = CreateRectRgn(rctClient.Le ft, rctClient.Top, rctClient.Right, rctClient.Bottom)
hFrame = CreateRectRgn(rctFrame.Lef t, rctFrame.Top, rctFrame.Right, rctFrame.Bottom)
' *** Create the new "Transparent" region
CombineRgn hFrame, hClient, hFrame, RGN_XOR
' *** Now lock the window's area to this created region
SetWindowRgn frm.hWnd, hFrame, True
End Sub
' *** Make form transparent
Declare Function CombineRgn Lib "GDI32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Declare Function CreateRectRgn Lib "GDI32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function GetClientRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Public Const RGN_AND = 1
Public Const RGN_COPY = 5
Public Const RGN_DIFF = 4
Public Const RGN_OR = 2
Public Const RGN_XOR = 3
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Sub MakeFormTransparent(frm As Form)
' *** Make a form transparent
Dim rctClient As RECT, rctFrame As RECT
Dim hClient As Long, hFrame As Long
' *** Grab client area and frame area
GetWindowRect frm.hWnd, rctFrame
GetClientRect frm.hWnd, rctClient
' *** Convert client coordinates to screen coordinates
Dim lpTL As POINTAPI, lpBR As POINTAPI
lpTL.x = rctFrame.Left
lpTL.y = rctFrame.Top
lpBR.x = rctFrame.Right
lpBR.y = rctFrame.Bottom
ScreenToClient frm.hWnd, lpTL
ScreenToClient frm.hWnd, lpBR
rctFrame.Left = lpTL.x
rctFrame.Top = lpTL.y
rctFrame.Right = lpBR.x
rctFrame.Bottom = lpBR.y
rctClient.Left = Abs(rctFrame.Left)
rctClient.Top = Abs(rctFrame.Top)
rctClient.Right = rctClient.Right + Abs(rctFrame.Left)
rctClient.Bottom = rctClient.Bottom + Abs(rctFrame.Top)
rctFrame.Right = rctFrame.Right + Abs(rctFrame.Left)
rctFrame.Bottom = rctFrame.Bottom + Abs(rctFrame.Top)
rctFrame.Top = 0
rctFrame.Left = 0
' *** Convert RECT structures to region handles
hClient = CreateRectRgn(rctClient.Le
hFrame = CreateRectRgn(rctFrame.Lef
' *** Create the new "Transparent" region
CombineRgn hFrame, hClient, hFrame, RGN_XOR
' *** Now lock the window's area to this created region
SetWindowRgn frm.hWnd, hFrame, True
End Sub
ASKER
To many errors in that, the public consts is the frst error that comes up
What kind of errors? It works perfectly here on my computer...
Use Waty's code and put it in a module.
private sub form_load
MakeFormTransparent me
end sub
private sub form_load
MakeFormTransparent me
end sub
ASKER
Public Sub MakeFormTransparent(frm As Form)
' *** Make a form transparent
Dim rctClient As RECT, rctFrame As RECT
Dim hClient As Long, hFrame As Long
' *** Grab client area and frame area
GetWindowRect frm.hWnd, rctFrame
GetClientRect frm.hWnd, rctClient
' *** Convert client coordinates to screen coordinates
Dim lpTL As POINTAPI, lpBR As POINTAPI
lpTL.x = rctFrame.Left
lpTL.y = rctFrame.Top
lpBR.x = rctFrame.Right
lpBR.y = rctFrame.Bottom
ScreenToClient frm.hWnd, lpTL
ScreenToClient frm.hWnd, lpBR
rctFrame.Left = lpTL.x
I get an error on the screentoclient stuff, when i put it in the modual
' *** Make a form transparent
Dim rctClient As RECT, rctFrame As RECT
Dim hClient As Long, hFrame As Long
' *** Grab client area and frame area
GetWindowRect frm.hWnd, rctFrame
GetClientRect frm.hWnd, rctClient
' *** Convert client coordinates to screen coordinates
Dim lpTL As POINTAPI, lpBR As POINTAPI
lpTL.x = rctFrame.Left
lpTL.y = rctFrame.Top
lpBR.x = rctFrame.Right
lpBR.y = rctFrame.Bottom
ScreenToClient frm.hWnd, lpTL
ScreenToClient frm.hWnd, lpBR
rctFrame.Left = lpTL.x
I get an error on the screentoclient stuff, when i put it in the modual
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Oops, I forgot to had this declaration.
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 Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Long) As Long
Public Sub GlassifyForm(frm As Form)
Const RGN_DIFF = 4
Const RGN_OR = 2
Dim outer_rgn As Long
Dim inner_rgn As Long
Dim wid As Single
Dim hgt As Single
Dim border_width As Single
Dim title_height As Single
Dim ctl_left As Single
Dim ctl_top As Single
Dim ctl_right As Single
Dim ctl_bottom As Single
Dim control_rgn As Long
Dim combined_rgn As Long
Dim ctl As Control
If WindowState = vbMinimized Then Exit Sub
' Create the main form region.
wid = ScaleX(Width, vbTwips, vbPixels)
hgt = ScaleY(Height, vbTwips, vbPixels)
outer_rgn = CreateRectRgn(0, 0, wid, hgt)
border_width = (wid - ScaleWidth) / 2
title_height = hgt - border_width - ScaleHeight
inner_rgn = CreateRectRgn( _
border_width, _
title_height, _
wid - border_width, _
hgt - border_width)
' Subtract the inner region from the outer.
combined_rgn = CreateRectRgn(0, 0, 0, 0)
CombineRgn combined_rgn, outer_rgn, _
inner_rgn, RGN_DIFF
' Create the control regions.
For Each ctl In Controls
If ctl.Container Is frm Then
ctl_left = ScaleX(ctl.Left, frm.ScaleMode, vbPixels) _
+ border_width
ctl_top = ScaleX(ctl.Top, frm.ScaleMode, vbPixels) _
+ title_height
ctl_right = ScaleX(ctl.Width, frm.ScaleMode, vbPixels) _
+ ctl_left
ctl_bottom = ScaleX(ctl.Height, frm.ScaleMode, vbPixels) _
+ ctl_top
control_rgn = CreateRectRgn( _
ctl_left, ctl_top, _
ctl_right, ctl_bottom)
CombineRgn combined_rgn, combined_rgn, _
control_rgn, RGN_OR
End If
Next ctl
' Restrict the window to the region.
SetWindowRgn hWnd, combined_rgn, True
End Sub
Private Sub Form_Resize()
GlassifyForm Me
End Sub
'*Note Taken From VB-Helper.Com Many Examples Are Held There