Servus,
erstelle ein neues Projekt und ändere die Formeigenschaften wie folgt:
- StartUpPosition = Manuell
- BorderStyle=None
- Backcolor ändern um Bsp. besser verfolgend zu können
Füge 1 Timer auf die Form und ändere dessen Namen in tmrWinFade
Anschließend folgenden Code ins Form-Modul kopieren:Option Explicit
' ermittelt die Größe eines Fensters
Private Declare Function GetWindowRect Lib "user32" ( _
ByVal hwnd As Long, _
lpRect As RECT) As Long
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
' Fensterhandle eines Fensters ermitteln
Private Declare Function FindWindow Lib "user32.dll" _
Alias "FindWindowA" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As Long
' Fenster-ZRichtung, -position und -größe ändern
Private Declare Function SetWindowPos Lib "user32" ( _
ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal X As Long, _
ByVal y As Long, _
ByVal cx As Long, _
ByVal cy As Long, _
ByVal wFlags As Long) As Long
' Fenster immer im Vordergrund halten (ZRichtung)
Private Const HWND_TOPMOST As Long = -1
' Fensterposition nicht ändern
Private Const SWP_NOMOVE As Long = &H2
' Fenstergröße nicht ändern
Private Const SWP_NOSIZE As Long = &H1
Private Sub Form_Load()
On Error Resume Next
' Fenster immer im Vordergrund halten (Fenstergröße und -position nicht
' ändern)
SetWindowPos Me.hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE + SWP_NOSIZE
' Start-Fenster-Position festlegen
' obere Fensterposition = (Bildschirmhöhe) - (Taskleisten-Höhe) - (
' Fensterhöhe)
Me.Top = Screen.Height - GetTaskbarHeight - Me.Height
Me.Left = Screen.Width
' Tag="1": FadeIn / Tag="2": FadeOut / Tag="": Warten
tmrWinFade.Tag = "1"
tmrWinFade.Interval = 25
tmrWinFade.Enabled = True
End Sub
Private Sub tmrWinFade_Timer()
Dim X As Long
' FadeIn
If tmrWinFade.Tag = "1" Then
' Fenster um 4 Pixel nach links schieben
' (VB rechnet mit Twips und Screen.TwipsPerPixelX ermittelt die Twips je
' Pixel in X-Richtung)
X = Me.Left - (Screen.TwipsPerPixelX * 4)
' prüfen, ob das Fenster vom Bildschirmrand weg positioniert werden soll...
If X <= Screen.Width - Me.Width Then
' ...wenn ja, dann Fenster direkt am Bildschirmrand positionieren...
X = Screen.Width - Me.Width
' ...FadeIN beenden und "Warten" aktivieren
tmrWinFade.Tag = "" ' Warten aktivieren
' 5Sek warten
tmrWinFade.Interval = 5000 ' = 5Sek warten
End If
' Fensterposition ändern
Me.Left = X
' FadeOut
ElseIf tmrWinFade.Tag = "2" Then
' Fenster um 4 Pixel nach rechts schieben
' (VB rechnet mit Twips und Screen.TwipsPerPixelX ermittelt die Twips je
' Pixel in X-Richtung)
X = Me.Left + (Screen.TwipsPerPixelX * 4)
' prüfen, ob das Fenster über den Bildschirmrand hinaus positioniert werden
' soll...
If X > Screen.Width Then
' wenn ja, dann Fenster direkt am Bildschirmrand positionieren ...
X = Screen.Width
' ...Fenster entladen...
Unload Me
' ...Speicher freigeben...
Set Form1 = Nothing
' Programm beenden
End
' Sub beenden
Exit Sub ' kann gelöscht werden, wenn vorliegendes "End" nicht entfernt _
wird
End If
' Fensterposition ändern
Me.Left = X
' Warten
Else
tmrWinFade.Tag = "2" ' FadeOut aktivieren
tmrWinFade.Interval = 25
End If
End Sub
' Höhe der Taskleiste ermitteln (in Twips)
Private Function GetTaskbarHeight() As Long
Dim lhwnd As Long, rPos As RECT
' Fensterhandle der Taskleiste ermitteln
lhwnd = FindWindow("Shell_TrayWnd", vbNullString)
' ist Fensterhandle gültig?
If lhwnd <> 0 Then
' Größe der Taskleiste ermitteln (in Pixel)
GetWindowRect lhwnd, rPos
' Höhe der Taskleiste = (untere Position) - (obere Position) - (2)
' VB rechnet mit Twips (Pixelhöhe*Screen.TwipsPerPixelY=TwipsHöhe)
GetTaskbarHeight = (rPos.Bottom - rPos.Top - 2) * Screen.TwipsPerPixelY
Else
' wenn kein Taskleisten-Handle ermittelt werden konnte,
' dann 0 zurückgeben
GetTaskbarHeight = 0
End If
End Function Viel Spass,
R@lf |