Fragensteller
Einzelne Elemente transparent

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)
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 -
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
-
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