Hallo Leute!
Ich bin neu hier und hab folgendes Problem:
ich hab grad seit längerer Zeit wieder mit VB (6) angefangen was zu proggen, und will ein kleines Minigame schreiben.
Soweit funzt auch alles, aber ich hab da son Paar BMPs, die müssen tranzparent werden.
D.h., dass die Umgebungsfarbe (in meinem Fall d. braun) weggeschnitten wird. Dazu hab ich auf meiner Platte folgenden Code gefunden (in einem Modul):
Public Declare Function GetDC Lib "User32" (ByVal hwnd As Long) _
As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject _
As Long) 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 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 Long) As Long
Public cmdDc As Long
Public Function picTranz(cpic As PictureBox) As Long
Dim lHoch As Long
Dim lBreit As Long
Dim lTemp As Long
Dim lSkin As Long
Dim lStart As Long
Dim lZeile As Long
Dim lSpalte As Long
Dim lBackColor As Long
lSkin = CreateRectRgn(0, 0, 0, 0)
With cpic
lHoch = .Height / Screen.TwipsPerPixelY
lBreit = .Width / Screen.TwipsPerPixelX
lBackColor = GetPixel(.hDC, 0, 0)
For lZeile = 0 To lHoch - 1
lSpalte = 0
Do While lSpalte < lBreit
Do While lSpalte < lBreit And GetPixel(.hDC, lSpalte, lZeile) = lBackColor
lSpalte = lSpalte + 1
Loop
If lSpalte < lBreit Then
lStart = lSpalte
Do While lSpalte < lBreit And GetPixel(.hDC, lSpalte, lZeile) <> lBackColor
lSpalte = lSpalte + 1
Loop
If lSpalte > lBreit Then lSpalte = lBreit
lTemp = CreateRectRgn(lStart, lZeile, lSpalte, lZeile + 1)
Call CombineRgn(lSkin, lSkin, lTemp, 2)
Call DeleteObject(lTemp)
End If
Loop
Next lZeile
End With
picTranz = lSkin
End Function
Public Sub picTransparent(cpic As PictureBox)
Dim lSkin As Long
With cpic
.Visible = True
.BorderStyle = 0
.AutoRedraw = True
.AutoSize = True
lSkin = picTranz(cpic)
Call SetWindowRgn(cpic.hwnd, lSkin, True)
End With
End Sub funzt soweit auch alles. Allerdings hab ich nun eine kleine Animation drin. D.h., dass alle 100 Millisekunden muss der Tranzparente Bereich geändert werden. Das mach ich mit nem Timer. Wenn ich da aber nun reinschreibe, das er für alle Bilder die Transparenz immer wieder neu berechnen soll, hab ich nur noch ein besseres Standbild :-C
Also dacht ich mir, dass ich beim laden der Form die Schablone für alle Bilder vorwegberechne und die dann nur noch zu laden brauch.
Aber was ich auch mache, ich krig das net hin *lol*
Ich hab da irgendwie ein totales Blackout, hoffe, dass ihr mir helfen könnt!!!
Danke!
_________________________________________________________
www.proofs-site.de.vu
Meine VB-Seite! |