vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

Visual-Basic Einsteiger
Re: 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
alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Tip Ein-/Ausblend-Effekt mit Layered Windows geht nicht mit ...1.506UrsS13.12.09 09:00
Re: Tip Ein-/Ausblend-Effekt mit Layered Windows geht nicht ...926UrsS13.12.09 09:46

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

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

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