none
Einzelne Elemente transparent RRS feed

  • Frage

  • Hallo!

     

    In meinem Programm möchte ich einige Elemente, wie zum Beispiel ein Panel oder ein MenuStrip transparent darstellen. Also ungefähr so wie die oberen Fensterränder bei Windows Vista / Windows 7. Funktioniert so etwas überhaupt bei den Visual Basic Express Versionen?

    (Bsp.: Windows Mobilitätscenter; Paint.NET)

    Dienstag, 13. April 2010 18:34

Alle Antworten

  • Hallo Björn,

    hier ist ein Beispiel mit Erklärung der Funktionsweise. Allerdings für C#. Das sollte sich aber mit relativ wenig Aufwand nach VB portieren lassen:

    Windows Vista Aero Glass in .NET Managed Win32 Applications
    http://www.codeproject.com/KB/vista/AeroGlassForms.aspx


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Dienstag, 13. April 2010 20:15
  • Hallo Björn,

    Einige Beispiele für das Glass Effekt in VB.NET:

    http://vbdotnetforum.com/index.php?/topic/1782-using-aero-features/

     

    [VB.NET]

    Imports System.Runtime.InteropServices
    Public Class Form1
        <StructLayout(LayoutKind.Sequential)> _
        Public Structure MARGINS
            Public cxLeftWidth As Integer
            Public cxRightWidth As Integer
            Public cyTopHeight As Integer
            Public cyButtomheight As Integer
        End Structure
    
        <DllImport("dwmapi.dll")> _
        Public Shared Function DwmExtendFrameIntoClientArea(ByVal hWnd As IntPtr, ByRef pMarinset As MARGINS) As Integer
        End Function
    
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
            On Error Resume Next
    
            Me.BackColor = Drawing.Color.Black
            Dim margins As MARGINS = New MARGINS
    
            margins.cxLeftWidth = -1
            margins.cxRightWidth = -1
            margins.cyTopHeight = -1
            margins.cyButtomheight = -1
    
            '//-1 -> Glass Effekt auf das ganze Fenster
    
            Dim hwnd As IntPtr = Me.Handle
            Dim result As Integer = DwmExtendFrameIntoClientArea(hwnd, margins)
    
        End Sub
    End Class

     

    Lies auch folgender Interessanter Artikel:

    http://stoyanoff.info/blog/code/glasslib/wrapper/

    Grüße,

    Robert

    Mittwoch, 14. April 2010 09:59
  • Hallo Robert,

    "On Error Resume Next" sollte man in VB.NET nicht mehr verwenden, sondern auf jeden Fall mit Try .. Catch arbeiten.


    Thorsten Dörfler
    Microsoft MVP Visual Basic
    Mittwoch, 14. April 2010 10:55
  • Hallo Thorsten,

    Danke … und nichts in den Catch Block J.

    Try
        '// Code, der hier Fehler verursacht
    Catch
        '// Fehler ignorieren
    Finally
    End Try

     

    Robert

    Grüße,
    Mittwoch, 14. April 2010 12:07
  • Danke für die Antworten!

    Ich kann dies leider noch nicht ausprobieren, weil ich nicht immer an einem Windows Vista / Windows 7 Computer arbeite. Doch am Wochenende werde ich es mal in mein Programm einfügen, obwohl ich den meisten Code nicht vollständig verstehe...

    Kann man dann mit

    margins.cxLeftWidth = -1
    margins.cxRightWidth = -1
    margins.cyTopHeight = -1
    margins.cyButtomheight = -1

    den Bereich des Aero Glass eisntellen?

    Gibst es vielleicht auch eine Funktion, mit der man nur einzelne Panels transparent machen kann. Die Eigenschaft Opacity gibt es ja leider nur für ganze Fenster und nicht für einzelne Elemente.

    Gruß,

    Björn

    Donnerstag, 15. April 2010 14:11