vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Top-Preis! AP-Access-Tools-CD Volume 1  
 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
Tip Ein-/Ausblend-Effekt mit Layered Windows geht nicht mit Windows 7 
Autor: UrsS
Datum: 13.12.09 09:00

der Tip "Ein-/Ausblend-Effekt mit Layered Windows" von Ralf Kronen geht bei mir (mit Windows 7)nicht. Die Form erscheint und verschwindet schlagartig.
Ich vermute, dass er auf einen extrem lagsamen Rechner vertraut.
Nachfolgend meine Lösung:

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 die 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_FadeInOut(ByVal hWnd As Long, Seconds As Single, FadeIn As Boolean)
' FadeIn
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()
' 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 ...925UrsS13.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