Vollständig transparentes Control

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Gather.

    Vollständig transparentes Control

    Hallo Leute, ich bins wieder :D
    Ich hab wieder einmal ein Problem mit den Controls.
    Ich möchte eine Art "Widget" für den Desktop programmieren, an sich scheint das bis jetzt garnichtmal so kompliziert zu sein doch mein Problem:
    Ich kriegs nicht hin, dass das Control semi Transparent ist, also nicht zur Form transparent sondern dass der Desktop sozusagen durchschimmert, so ähnlich wie
    die Aero Taskleiste etc.. Transparency Key macht zwar die Form transparent, veränder jedoch das Control worin ich ein Semi transparentes Bild habe nicht, da sich die Farbe der Form mit dem Bild addieren und somit
    eine andere Farbe entsteht.
    Wie ist es also möglich, Forms komplett transparent zum desktop zu machen ?

    Danke schonmal im voraus :D

    MfG Trunk
    vll stell ich mich dumm, jedoch ich verstehe dein Problem nicht wirklich.
    Du willst die Form ganz transparent machen, jedoch was funktioniert da nicht?
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!


    Also, stell dir vor, ich habe eine Form und darauf eine Picturebox. Innerhalb dieser Picturebox hab ich ein semitransparentes Bild, was halt nen bisschen durchschimmert.
    Wenn ich jetzt den Hintergrund der Picturebox transparent mache, schimmert sozusagen die Farbe meiner Form etwas durch.
    Jetzt könnte man ja noch die Farbe der Form als Transparency Key setzen damit ich die nur noch die Picturebox sehen kann.
    Das Problem: Mein semi transparentes Bild lässt nichts durchschimmer, man kann also nicht "durchgucken" und z.B. den Desktop erkennen.
    Stattdessen erkennt man die Hintergrundfarbe der Form und darüber dann mein Semi transparentes Bild.
    Mein Ziel ist es jedoch, dass man durch das Bild halbwegs durchschauen kann und somit z.B. den Desktop erkennt.
    Genauso wie z.B. die Windows Taskbar beim Aero design. Hoffe, dass ich mich besser ausgedrückt habe.

    Danke

    Hier nochmal ein Beispiel:
    Hier:

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class AeroForm
    3. ‹StructLayout(LayoutKind.Sequential)›_
    4. Private Structure MARGINS
    5. Public LeftWidth As Integer
    6. Public RightWidth As Integer
    7. Public TopWidth As Integer
    8. Public BottomWidth As Integer
    9. End Structure
    10. ‹DllImport("dwmapi.dll")›_
    11. Private Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef margin As MARGINS)
    12. End Function
    13. Public Function SetAero(ByVal frm As Form) As Boolean
    14. Dim flag As Boolean = False
    15. Dim mg As New MARGINS
    16. mg.LeftWidth = -1
    17. mg.RightWidth = -1
    18. mg.TopWidth = -1
    19. mg.BottomWidth = -1
    20. Try
    21. 'WICHTIG!!!:
    22. frm.BackColor = Color.Black
    23. DwmExtendFrameIntoClientArea(frm.Handle, mg)
    24. flag = True
    25. Catch ex As Exception
    26. flag = False
    27. End Try
    28. End Function
    29. 'Aufruf:
    30. 'If SetAero(Me) = True Then
    31. 'Wenn erfolgreich, dann...
    32. 'Else
    33. 'Wenn nicht erfolgreich, dann
    34. 'End If
    35. End Class

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ChipPRO Österreich“ ()

    Das was under herr "Pro" hier erklären versuchen will ist der Glass-Effekt glaub ich.
    Dies beantwortet deine Frage jedoch nicht. Auf seine Art erhältst du nur den simplen Glass-Effekt.

    Siehe hier:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Imports System.Runtime.InteropServices
    2. Public Class Form1
    3. <StructLayout(LayoutKind.Sequential)> _
    4. Public Structure MARGINS
    5. Public cxLeftWidth As Integer
    6. Public cxRightWidth As Integer
    7. Public cyTopHeight As Integer
    8. Public cyButtomheight As Integer
    9. End Structure
    10. <DllImport("dwmapi.dll")> _
    11. Private Shared Function DwmExtendFrameIntoClientArea(ByVal hwnd As IntPtr, ByRef margin As MARGINS) As Integer
    12. End Function
    13. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    14. Dim mg As MARGINS = New MARGINS
    15. mg.cxLeftWidth = -1
    16. mg.cxRightWidth = -1
    17. mg.cyTopHeight = -1
    18. mg.cyButtomheight = -1
    19. 'set all value -1 to apply glass effect to the all of visible window
    20. Try
    21. DwmExtendFrameIntoClientArea(Me.Handle, mg)
    22. Catch ex As Exception
    23. End Try
    24. End Sub
    25. End Class


    Vorschau:



    bzw. eine bessere Version, die ich dir umbedingt empfehlen würde (da sie unter anderem auch Open-Source, und so somit keine externe dll benötigst):
    codeproject.com/Articles/38780…rary-for-your-Application

    Diese Methode könnte dein Problem beheben.
    bzw. teste einmal ob somit Bilder mit Alpha-Kanal halb transparent gemacht werden.

    Gutes gelingen!
    Mfg: Gather
    Private Nachrichten bezüglich VB-Fragen werden Ignoriert!