Transparenz und andere Effekte in Formularen

Windows Vista und andere Betriebssysteme machen vor, wie man den Wohlfühlfaktor vor dem Rechner durch schicke Effekte erhöht. Mit ein wenig Fantasie bekommt man ähnliches auch unter Access hin – zumindest kann man Formulare mit ein wenig API-Unterstützung halbtransparent schalten oder ein- und ausblenden. Was außerdem noch geht, zeigen wir in diesem Beitrag.

Transparente Formulare

Wenn Sie möchten, können Sie die Formulare in Ihrer Anwendung transparent darstellen. Die nachfolgend vorgestellte Routine benötigt dazu einige Konstanten und API-Funktionen:

Private Const GWL_EXSTYLE _
= -20
Private Const WS_EX_LAYERED _
= 524288
Private Const LWA_ALPHA = 2
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Declare Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function SetLayeredWindowAttributes Lib "user32.dll" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long

Die Funktion selbst schließlich heißt FormTransparency und erwartet zwei Parameter: einen Objektverweis auf das betroffene Formular (frm) und den Grad der Transparenz (intTransparency) mit einem Wert zwischen 0 (durchsichtig) und 255 (undurchsichtig).

Sub FormTransparency(ByVal frm As Access.Form, _
    ByVal intTransparency As Integer)
    Dim i As Long, hwnd As Long
    If frm Is Nothing Then Exit Sub
    If frm.PopUp = False Then Exit Sub
    hwnd = frm.hwnd
    i = GetWindowLong(hwnd, GWL_EXSTYLE)
    i = i Or WS_EX_LAYERED
    SetWindowLong hwnd, GWL_EXSTYLE, i
    SetLayeredWindowAttributes hwnd, 0, _
    AValue, LWA_ALPHA
    End Sub

Die einzige Voraussetzung für den Einsatz von Transparenz ist, dass die Eigenschaft Popup des Formulars auf den Wert True eingestellt sein muss. Das können Sie in den Formulareigenschaften erledigen.

Ein einfaches Beispiel enthält ein Textfeld zur Eingabe des Transparenzgrades und eine Schaltfläche, die beim Klicken die Transparenz des Formulars auf den angegebenen Wert einstellt (siehe Bild 1).

pic001.png

Bild 1: Beispiel für ein transparentes Formular

Die Beim Klicken-Ereignisprozedur des Formulars sieht schlicht so aus:

Private Sub cmdTransparenz_Click()
    FormTransparency Me, Me.txtTransparenz
    End Sub

Was kann man nun mit transparenten Formularen anfangen Sie könnten zum Beispiel dafür sorgen, dass ein Formular sich nicht einfach öffnet, sondern sich langsam ein- und auch wieder ausblendet.

Formular ein- und ausblenden

Bis zu dem Zeitpunkt, an dem man nicht selbst mal ein Formular gesehen hat, das sich fast übergangslos von nicht sichtbar bis zur vollen Pracht einblendet, findet man dieses Feature wahrscheinlich völlig unnötig. Aber schauen Sie doch selbst!

Alles, was Sie brauchen, ist das Formular, das beim Öffnen langsam ein- und beim Schließen sanft ausgeblendet werden soll – und natürlich ein wenig Code, den Sie komplett in Listing 1 finden.

Listing 1: Sanftes Ein- und Ausblenden eines Formulars

Dim intTransparency As Integer
Dim bolEinblenden As Boolean
Const cintTimerInterval As Integer = 10
Private Sub Form_Load()
    intTransparency = 0
    bolEinblenden = True
    Me.TimerInterval = cintTimerInterval
    End Sub
Private Sub Form_Open(Cancel As Integer)
    FormTransparency Me, 0
    End Sub
Private Sub Form_Timer()
    If bolEinblenden = True Then
        If Not intTransparency <= 255 Then
            intTransparency = intTransparency + 5
            FormTransparency Me, intTransparency
        Else
            Me.TimerInterval = 0
        End If
    Else
        If intTransparency > 0 Then
            intTransparency = intTransparency - 5
            FormTransparency Me, intTransparency
        Else
            Me.TimerInterval = 0
        End If
    End If
    End Sub
Private Sub Form_Unload(Cancel As Integer)
    intTransparency = 255
    bolEinblenden = False
    Me.TimerInterval = cintTimerInterval
    Do While Not intTransparency = 0
        DoEvents
        Loop
        End Sub

Das Formular arbeitet mit dem Bei Zeitgeber-Ereignis, das beim Öffnen des Formulars noch nicht aktiv ist, weil die Eigenschaft Zeitgeberintervall noch den Wert 0 enthält. Dies ändert sich direkt nach dem Öffnen in der Prozedur der Ereigniseigenschaft Beim Öffnen. Diese Routine macht das Formular zunächst durch einen entsprechenden Aufruf der Funktion MakeTransparency komplett transparent und stellt das Zeitgeberintervall auf den in der Konstanten cintTimerintervall festgelegten Wert. Dies führt dazu, dass der Timer von nun an in entsprechenden Intervallen ausgelöst wird. Vorher stellt die Routine noch die Variablen intTransparency auf den Wert 0 und bolEinblenden auf True. Beide werden in der nun aktivierten Prozedur Form_Timer benötigt, damit die Routine entscheiden kann, ob das Formular ein- oder ausgeblendet werden soll.

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar