vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#

https://www.vbarchiv.net
Rubrik: Oberfläche · Effekte   |   VB-Versionen: VB2010 - VB201504.09.20
Ein Trick für echte Form-Transparenz

Um eine echte Transparenz einer Form zu zeigen, muss man den hier erklärten Trick anwenden.

Autor:   Dietrich HerrmannBewertung:  Views:  2.741 
ohne HomepageSystem:  Win7, Win8, Win10, Win11kein Beispielprojekt 

Für eine Form gibt es vorgegebene 2 Möglichkeiten Transparenz anzuwenden:

  1. Dieselbe Farbe für TransParancyKey angeben wie für die BackColor. Dann ist der Hintergrund der Form bei der Anzeige vollkommen ausgeblendet.
  2. Die Einstellung der Opacity für die Form zwischen 0 und 100 Prozent. Dann kann die Form sozusagen semitransparent dargestellt werden. Allerdings werden dann auch alle auf der Form platzierten Controls gleich mit transparent gezeigt.

Um den Hintergrund von Controls semitransparent zu machen, die Controls aber in "Original"-Darstellung anzuzeigen, kann man sich mit dem folgenden Trick behelfen. Es wird eine zweite Form definiert, die sogenannte BackgroundForm, die dann in der Runtime genau hinter der MainForm positioniert wird.

MainForm sei die Hauptform, auf der die Controls angeordnet sind.
Dann richtet man diese Form so ein, wie hier im Code des Load-Events notiert:

BackColor mit der gewünschten Farbe, die dann gleichzeiteig zu TransparencyKey gemacht wird.
Als Public Property bgFrmForm wird die BackgroundForm vorgegeben.
Diese BackgroundForm wird jetzt mit Eigenschaften versorgt:

  • die Eigenschaft bgColor wird auf die BackColor der MainForm eingestellt
  • die Semitransparenz wird auf einen Wert zwischen 0 und 1 eingestellt
  • die MainForm wird zur OwnerForm
  • die BackgrundForm wird angezeigt

Beschreibung der BackgroundForm:
Sie enthält die drei Eigenschaften bgOwnerForm, bgOpacity, bgColor, die alle beim Laden der MainForm voreingestellt werden. Sie steuern das Erscheinungsbild des Hintergrunds.
Im Shown-Event der BackgroundForm wird zunächst

  • die OwnerForm gesetzt, dann
  • die Größe mit der Größe der Mainform gleichgesetzt
  • die Location mit der Location der MainForm gleichgesetzt
  • die BackColor aus der Eigenschaft bgColor gesetzt
  • die Opacity aus der Eigenschaft bgOpacity gesetzt

Jetzt wird zur MainForm ein semitransparenter Hintergrund in einer gewünschten Farbe gezeigt und alle Controls der MainForm werden "nichttransparent" angezeigt.

Hier der Code zur MainForm:

Public Class MainForm
  Public Property bgFrmForm As Form = BackgroundForm
 
  Public Sub New()
    InitializeComponent()
    SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint _
      Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)
  End Sub
 
  Private Sub MainForm_Load(sender As Object, e As EventArgs) _
    Handles Me.Load
 
    BackColor = Color.Black
    TransparencyKey = BackColor
    BringToFront()
 
    With BackgroundForm
      .bgColor = BackColor
      .bgOpacity = 0.4
      .bgOwnerForm = Me
      .Show()
    End With
  End Sub
 
End Class

Hier der Code zur BackgroundForm:

Public Class BackgroundForm
 
  Public Property bgOwnerForm As Form 
  Public Property bgOpacity As Single = 0.6
  Public Property bgColor As Color = Color.Black
 
  Public Sub New()
    InitializeComponent()
    SetStyle(ControlStyles.OptimizedDoubleBuffer Or ControlStyles.AllPaintingInWmPaint _
           Or ControlStyles.ResizeRedraw Or ControlStyles.UserPaint, True)
  End Sub
 
  Private Sub dhBackgroundForm_Shown(sender As Object, e As EventArgs) _
    Handles Me.Shown
 
    Owner = bgOwnerForm
    Size = New Size(bgOwnerForm.Size)
    Location = New Point(bgOwnerForm.Location)
    BackColor = bgColor
    Opacity = bgOpacity
  End Sub
 
End Class

Hinweis:
Dieser Tipp zeigt ausschließlich ein Prinzip der Lösung auf. Es werden nicht Aktionen wie Resizing, Verschieben oder dergleichen der MainForm behandelt!



Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
 
Copyright ©2000-2024 vb@rchiv Dieter OtterAlle Rechte vorbehalten.


Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.