Schöne Fensteranimation mit Transparenz
Verfasst: 29.01.2008 16:38
Hallo!
Habe gerade einen alten Code kompiliert, der sehr groß ist (2225 Zeilen, 68,2 KB) um mit Genugtuung festzustellen, dass der neue Compiler wirklich spürbar schneller ist, als der alte.
Dabei sprang mir diese Prozedur ins Auge, die ich einfach mal mit euch teilen wollte.
Die Prozedur muss als Thread aufgerufen werden und blendet langsam das Fenster aus, sobald es von der Maus verlassen wird. Wenn die Maus das Fenster wieder betritt, wird das Fenster wieder langsam sichtbar.
Die Schnelligkeit, mit der das Fenster ein- und ausgeblendet wird, könnt ihr selber anpassen, entweder das Delay() verkleinern und/oder die Schrittwerte erhöhen (empfohlen).
Pro Fenster 1 Thread, wenn ihr also mehrere Fenster animieren wollt.
Funktioniert ab Windows 2000 und höher (Windows only), die Prozedur beendet sich selbst automatisch, wenn Windows 9x verwendet wird, beendet sich die Prozedur automatisch.
P.S.: Meine Freundin 'Miranda' hat mich zu diesem Effekt inspiriert.
Habe gerade einen alten Code kompiliert, der sehr groß ist (2225 Zeilen, 68,2 KB) um mit Genugtuung festzustellen, dass der neue Compiler wirklich spürbar schneller ist, als der alte.
Dabei sprang mir diese Prozedur ins Auge, die ich einfach mal mit euch teilen wollte.
Die Prozedur muss als Thread aufgerufen werden und blendet langsam das Fenster aus, sobald es von der Maus verlassen wird. Wenn die Maus das Fenster wieder betritt, wird das Fenster wieder langsam sichtbar.
Die Schnelligkeit, mit der das Fenster ein- und ausgeblendet wird, könnt ihr selber anpassen, entweder das Delay() verkleinern und/oder die Schrittwerte erhöhen (empfohlen).
Pro Fenster 1 Thread, wenn ihr also mehrere Fenster animieren wollt.
Funktioniert ab Windows 2000 und höher (Windows only), die Prozedur beendet sich selbst automatisch, wenn Windows 9x verwendet wird, beendet sich die Prozedur automatisch.
Code: Alles auswählen
Macro TransparentesFenster(Window, Sichtbarkeit=255)
SetWindowLong_(WindowID(Window), #GWL_EXSTYLE, GetWindowLong_(WindowID(Window),#GWL_EXSTYLE)|#WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(Window), 0, Sichtbarkeit, #LWA_ALPHA)
EndMacro
Procedure TransparenzAnimation(WindowID)
Protected n, opacity=255
If OSVersion() < #PB_OS_Windows_2000
ProcedureReturn
EndIf
While IsWindow(WindowID)
If WindowMouseX(WindowID) <> -1 And WindowMouseY(WindowID) <> -1 And GetForegroundWindow_() = WindowID(WindowID)
If opacity < 255
opacity+16
If opacity > 255
opacity=255
EndIf
TransparentesFenster(WindowID, opacity)
Delay(35)
EndIf
Continue
Else
If opacity > 118
opacity-16
If opacity < 1
opacity=1
EndIf
TransparentesFenster(WindowID, opacity)
Delay(35)
EndIf
Continue
EndIf
Delay(500)
Wend
EndProcedure
OpenWindow(0, 0, 0, 640, 480, "AND51 - Bitte Maus in und aus dem Fenster schieben!")
CreateThread(@TransparenzAnimation(), 0)
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow