Ich habe hier einmal die frage gestellt, wie man die Hintergrundfarbe tauschen kann.
Ich habe die antwort bekommen, das ich es mit diesem Code, die Farbe tauschen kann.
Private Declare Function TransparentBlt& Lib "msimg32" (ByVal hdcDest&, _
ByVal nXOriginDest&, ByVal nYOriginDest&, ByVal nWidthDest&, ByVal _
nHeightDest&, _
ByVal hdcSrc&, ByVal nXOriginSrc&, ByVal nYOriginSrc&, ByVal nWidthSrc&, _
ByVal nHeightSrc&, ByVal crTransparent&)
Private Sub TauscheFarbe(Quelle As PictureBox, alteFarbe&, neueFarbe&)
Dim TPic As PictureBox
Set TPic = Me.Controls.Add("VB.PictureBox", "P1")
TPic.ScaleMode = vbPixels
TPic.AutoSize = True
TPic.AutoRedraw = True
With Quelle
.ScaleMode = vbPixels
.AutoRedraw = True
Set TPic.Picture = .Image
Set .Picture = LoadPicture()
.Cls
.BackColor = neueFarbe
Call TransparentBlt(.hDC, 0, 0, .ScaleWidth, .ScaleHeight, TPic.hDC, 0, 0, _
.ScaleWidth, .ScaleHeight, alteFarbe)
End With
Me.Controls.Remove TPic
End Sub Nun das klappt alles wunderbar, bis auf eines.
Und zwar ich habe ein Label Steuerelement in Picture hinein gefügt d.h. das der Label Steuerelement im Picture integriert ist.
Nun ist jetzt das Problem, das die Position von Label Steuerelement nicht richtig ist.
Das heißt zu Beispiel das Label Steuerelement die Position Height 255, Width 320 hat.
Nun wenn die Funktion TauscheFarbe zum Einsatz kommt, das dann Label Steuerelement z.B.: Height nicht 255, sondern viel größer ist.
Hat einer eine Idee wie man das Problem lösen kann?
Ich habe mir gedacht, das man es mit Image Steuerelement statt Picture Steuerelement.
Aber leider stimmt dies nicht mit der TauscheFarbe Codes überein.
Und wenn ich den Label Steuerelement außerhalb vom Picture setzte ist das prtoblem das man den Label Steuerelement nicht sieht.
Der aktuelle sieht so aus:
Private Declare Function TransparentBlt& Lib "msimg32" (ByVal hdcDest&, _
ByVal nXOriginDest&, ByVal nYOriginDest&, ByVal nWidthDest&, ByVal _
nHeightDest&, _
ByVal hdcSrc&, ByVal nXOriginSrc&, ByVal nYOriginSrc&, ByVal nWidthSrc&, _
ByVal nHeightSrc&, ByVal crTransparent&)
Private Sub Command9_Click()
Picture1.Picture = Bild.ListImages(2).Picture
TauscheFarbe Picture1, &HFF00FF, &H8000000B
Label9.Height = 255
Label9.Top = 30
Label9.Width = 320
Label9.Left = 30
End Sub
Private Sub TauscheFarbe(Quelle As PictureBox, alteFarbe&, neueFarbe&)
Dim TPic As PictureBox
Set TPic = Me.Controls.Add("VB.PictureBox", "P1")
TPic.ScaleMode = vbPixels
TPic.AutoSize = True
TPic.AutoRedraw = True
With Quelle
.ScaleMode = vbPixels
.AutoRedraw = True
Set TPic.Picture = .Image
Set .Picture = LoadPicture()
.Cls
.BackColor = neueFarbe
Call TransparentBlt(.hDC, 0, 0, .ScaleWidth, .ScaleHeight, TPic.hDC, 0, 0, _
.ScaleWidth, .ScaleHeight, alteFarbe)
End With
Me.Controls.Remove TPic
End Sub Danke für eure hilfe
Mit freundlichen Grüßen Dj.Tommy |