Har ni tagit upp hur man gör transparenta Forms, här i forumet? Är du ute efter hur man gör? Kolla i sådana fall på http://www.allapi.net/apilist/example.php?example=AlphaBlend så kanske du kan lista ut hur det fungerar. Verkar inte funka. Ska se om jag kan sy ihop ett exempel som fungerar på hela formen... Men det krävs Win2000 eller XP (vet inte hur det är med ME). Om du sätter BorderStyle=0 så ska nog detta fungera: OK, nu har jag lyckats med det själv:Transparent
Det går ju med Win2000/WinXP.
/ACSv: Transparent
/JohanSv: Transparent
Koden har ju bara med en massa bilder att göra, dessutom händer det inget med bilderna!
Hur får jag min FORM/MITT FÖNSTER/HELA PROGRAMMET att bli tranparent?Sv: Transparent
/JohanSv: Transparent
<code>
Option Explicit
Const AC_SRC_OVER = &H0
Private Type BLENDFUNCTION
BlendOp As Byte
BlendFlags As Byte
SourceConstantAlpha As Byte
AlphaFormat As Byte
End Type
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal hdc As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal lInt As Long, ByVal BLENDFUNCT As Long) As Long
Private Declare Sub RtlMoveMemory Lib "kernel32.dll" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Private Sub Form_Load()
'KPD-Team 2000
'URL: http://www.allapi.net/
'E-Mail: KPDTeam@Allapi.net
Dim BF As BLENDFUNCTION, lBF As Long, hdcScreen As Long
'Set the graphics mode to persistent
Me.AutoRedraw = True
'API uses pixels
Me.ScaleMode = vbPixels
'set the parameters
With BF
.BlendOp = AC_SRC_OVER
.BlendFlags = 0
.SourceConstantAlpha = 128
.AlphaFormat = 0
End With
hdcScreen = GetDC(0)
'copy the BLENDFUNCTION-structure to a Long
RtlMoveMemory lBF, BF, 4
'AlphaBlend the picture from Picture1 over the picture of Picture2
AlphaBlend Me.hdc, 0, 0, Me.ScaleWidth, Me.ScaleHeight, hdcScreen, Me.Left / Screen.TwipsPerPixelX, Me.Top / Screen.TwipsPerPixelY, Me.ScaleWidth, Me.ScaleHeight, lBF
Call ReleaseDC(0, hdcScreen)
End Sub
</code>
/JohanSv: Transparent
Det finns ett färdigt api eller nåt till detta. Fenomenet kallas för "Layered Windows" och på MSDN har jag hittat kodexempel för C++ och VB.NET, men det skall fungera med VB6 oxå om man har Win2000/WinXP.
KOLLA DENNA:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwui/html/layerwin.asp
Bläddra ner en bit till bilden.
Man kan göra alla andra program som körs på datorn också transparenta. Inte bara programmets forms.
Eran version funkar ju inte om man flyttar på fönstret. Det går nog fixa. men det STORA problemet är att om man har en knapp (eller annan kontroll på formen), blir ju inte den genomskinlig!!!
/ACSv: Transparent
<code>
Private Const WS_EX_LAYERED As Long = &H80000
Private Const LWA_ALPHA As Long = &H2
Private Declare Function SetLayeredWindowAttributes Lib "user32" _
(ByVal hWnd As Long, ByVal crKey As Long, _
ByVal bAlpha As Long, ByVal dwFlags As Long) As Long
Private Const GWL_EXSTYLE = (-20)
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
(ByVal hWnd As Long, ByVal nIndex As Long) As Long
Private Sub Command1_Click()
'// Set WS_EX_LAYERED on this window
Call SetWindowLong(hWnd, GWL_EXSTYLE, GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
'// Make this window 70% alpha
Call SetLayeredWindowAttributes(hWnd, 0, (255 * 70) / 100, LWA_ALPHA)
End Sub
</code>