| |

Visual-Basic EinsteigerRe: Tip Ein-/Ausblend-Effekt mit Layered Windows geht nicht mit Windows 7 | |  | Autor: UrsS | Datum: 13.12.09 09:46 |
| Habe noch festgestellt, dass die Form kurz eingeblendet wird ,wenn schon eine Form sichtbar ist.
Also nochmals:
Option Explicit
'von Urs Stoller
'Tipp von Ralf Kronen wurde geändert.
'in ein Modul einfügen:
' zunächst die benötigten API-Deklarationen
Private Declare Function SetLayeredWindowAttributes Lib "user32" ( _
ByVal hWnd As Long, _
ByVal crKey As Long, _
ByVal bAlpha As Byte, _
ByVal dwFlags As Long) As Boolean
Private Declare Function SetWindowLong Lib "user32" _
Alias "SetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long, _
ByVal dwNewLong As Long) As Long
Private Declare Function GetWindowLong Lib "user32" _
Alias "GetWindowLongA" ( _
ByVal hWnd As Long, _
ByVal nIndex As Long) As Long
Private Const GWL_EXSTYLE = -20
Private Const WS_EX_LAYERED = &H80000
Private Const LWA_COLORKEY = &H1
Private Const LWA_ALPHA = &H2
'Nachfolgend Prozeduren zum Ein- und Ausblenden eines Fensters.
'Im ersten Paramater wird das Fensterhandle erwartet.
'Der zweite Paramater ist die Dauer des Ein / Ausblbendens in Sekunden.
'Der drite Paramater legt Einblenden oder Ausblbenden fest.
Public Sub lwa_Transparent(ByVal hWnd As Long)
' Fenster-Attribute setzen
Call SetWindowLong(hWnd, GWL_EXSTYLE, _
GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
SetLayeredWindowAttributes hWnd, 0, 0, LWA_ALPHA
End Sub
Public Sub lwa_FadeInOut(ByVal hWnd As Long, Seconds As Single, FadeIn As Boolean)
Dim bAlpha As Integer
Dim iStep As Integer
Dim DivSeconds As Single
Dim iCounter As Integer
' Fenster-Attribute setzen
Call SetWindowLong(hWnd, GWL_EXSTYLE, _
GetWindowLong(hWnd, GWL_EXSTYLE) Or WS_EX_LAYERED)
DivSeconds = Seconds / 255
iCounter = 255
If FadeIn Then
iStep = 1
bAlpha = 0
Else
iStep = -1
bAlpha = 255
End If
While iCounter > 0
If bAlpha > 255 Then bAlpha = 255
If bAlpha < 0 Then bAlpha = 0
SetLayeredWindowAttributes hWnd, 0, bAlpha, LWA_ALPHA
' DoEvents
Pause DivSeconds
bAlpha = bAlpha + iStep
iCounter = iCounter - 1
Wend
End Sub
'Ein paar kurze Erklärungen:
'Die SetLayeredWindowAttributes erwartet im dritten Parameter einen Wert im Bereich 0...255, wobei 0 die Form vollkommen ausblendet,
'd.h. die Form ist nicht mehr sichtbar und 255 dementsprechend die Form vollständig ohne jegliche Transparenz anzeigt.
'Parameterbeschreibung
'hwnd = Handle für das aktive Fenster
'crKey = Farbe, alle Pixel in dieser Farbe lassen den Hintergrund durchscheinen
'bAlpha = Durchsichtigkeit, bei 0 ist das Fenster transparent, bei 255 ganz sichtbar
'dwFlags = Flag mit folgenden Werten (auch beide):
'LWA_COLORKEY - crKey wird verwendet
'LWA_ALPHA - bAlpha wird verwendet
'
' Pause Funktion
' Wie immer gilt: Wenn Sie die folgenden Funktion in einem Modul plazieren, ist sie im gesamten Projekt verfügbar:
Sub Pause(Seconds As Single)
Dim Timer1 As Single, Timer2 As Single, currentDate As Date
currentDate = Date
Timer1 = Timer + Seconds
Timer2 = Timer1 - 86400 '24 Stunden
While ((Timer() < Timer1) And (currentDate = Date)) Or _
((Timer() < Timer2) And (currentDate + 1 = Date))
DoEvents 'Andere Prozesse nicht behindern
Wend
End Sub
'-----------------------------------------------------------------------------------------
'Beispiel
'Um die "neuen" Funktion gleich testen zu können, erstellen Sie ein neues Projekt und fügen den obigen Code in ein Modul ein.
'Das untenstehende kommt in den Code-Teil der Form. Nicht Auskommentiert machen.
'
'Im Form_Load Event wird der "Einblenden"-Effekt realisiert. Hierzu wird zunächst der Fensterstil geändert, dann wird die Prozedur lwa_FadeIn aufgerufen.
'
'Private Sub Form_Load()
' lwa_Transparent Me.hWnd
' Me.Show
' lwa_FadeInOut Me.hWnd, 0.5, True
'End Sub
'Den "Ausblenden"-Effekt beim Schliessen der Form erreichen Sie so:
'Private Sub Form_Unload(Cancel As Integer)
' ' FadeOut und beenden
' lwa_FadeInOut Me.hWnd, 1.5, False
' Unload Me
' End
'End Sub
MFG urs |  |
 | Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
  |
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats Neu! sevDTA 3.0 Pro 
SEPA mit Kontonummernprüfung
Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Weitere Infos
|
|
|
Copyright ©2000-2025 vb@rchiv Dieter Otter Alle 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.
Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel
|
|