|  | Unser Angebot für Sie! Lesen Sie diesen Beitrag und 500 andere sofort im Onlinearchiv, und erhalten Sie alle zwei Monate brandheißes Access-Know-how auf 72 gedruckten Seiten! Plus attraktive Präsente, zum Beispiel das bald erscheinende Buch 'Access 2010 - Das Grundlagenbuch für Entwickler'! |
| |
Zusammenfassung
Werten Sie Ihre Anwendung mit interessanten Effekten optisch auf.
Techniken
Formulare
Voraussetzungen
Access 2000 oder höher
Beispieldateien
TransparenzUndAndereEffekte.mdb
Shortlink
655
Transparenz und andere Effekte in Formularen
André Minhorst, Duisburg
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 (s. Abb. 1).
Abb. 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.
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
|