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