Code: Alles auswählen
; ***********************************************
; * *
; * 'Animate Window.pb' *
; * *
; * Author: Fluid Byte *
; * Version: PureBasic V4.02 *
; * E-Mail: fluidbyte@web.de *
; * *
; ***********************************************
Declare WindowCallback(hWnd.l,Msg.l,wParam.l,lParam.l)
;-Varibales
Enumeration
#BTN_Animate
#FRM_Type
#OPT_Blend
#OPT_Slide
#STR_Time
#TXT_Time
#TXT_Millisecs
#FRM_Direction
#OPT_Top
#OPT_BottomRight
#OPT_BottomLeft
#OPT_Bottom
#OPT_TopRight
#OPT_Right
#OPT_Left
#OPT_TopLeft
#OPT_Center
#FRM_Visibility
#OPT_Hide
#OPT_Activate
EndEnumeration
#HIDE_DELAY = 400
#SHOW_DELAY = 300
Global Flags.l
Global AnimTime.w
;-Application Window
OpenWindow(0,233,45,327,225,"Animate Window",#WS_CAPTION | #WS_SYSMENU | #WS_MINIMIZEBOX | 1)
CreateGadgetList(WindowID(0))
Frame3DGadget(#FRM_Type,10,10,150,80,"Animation Type")
OptionGadget(#OPT_Slide,25,30,110,20,"Sliding Animation")
OptionGadget(#OPT_Blend,25,60,110,20,"Blending Animation")
Frame3DGadget(#FRM_Visibility,10,100,150,80,"Window Visibility")
OptionGadget(#OPT_Hide,25,120,90,20,"Hide Window")
OptionGadget(#OPT_Activate,25,150,100,20,"Activate Window")
Frame3DGadget(#FRM_Direction,175,10,140,135,"Slide Direction")
OptionGadget(#OPT_Top,235,35,15,15,"")
OptionGadget(#OPT_BottomRight,265,105,15,15,"")
OptionGadget(#OPT_BottomLeft,205,105,15,15,"")
OptionGadget(#OPT_Bottom,235,116,15,15,"")
OptionGadget(#OPT_TopRight,265,45,15,15,"")
OptionGadget(#OPT_Right,275,75,15,15,"")
OptionGadget(#OPT_Left,195,75,15,15,"")
OptionGadget(#OPT_TopLeft,205,45,15,15,"")
OptionGadget(#OPT_Center,235,75,15,15,"")
StringGadget(#STR_Time,255,160,35,20,"600",#PB_String_Numeric)
TextGadget(#TXT_Time,175,163,75,14,"Animation Time:")
TextGadget(#TXT_Millisecs,295,163,18,14,"Ms")
ButtonGadget(#BTN_Animate,10,190,310,29,"Animate Window")
;-Various
dwStyle = GetWindowLong_(GadgetID(#OPT_Blend),#GWL_STYLE)
SetWindowLong_(GadgetID(#OPT_Blend),#GWL_STYLE,dwStyle - #WS_TABSTOP)
dwStyle = GetWindowLong_(GadgetID(#OPT_Activate),#GWL_STYLE)
SetWindowLong_(GadgetID(#OPT_Activate),#GWL_STYLE,dwStyle - #WS_TABSTOP)
For i = #OPT_Top To #OPT_Center
dwStyle = GetWindowLong_(GadgetID(i),#GWL_STYLE)
SetWindowLong_(GadgetID(i),#GWL_STYLE,dwStyle - #WS_TABSTOP)
Next
SetGadgetState(#OPT_Slide,1)
SetGadgetState(#OPT_Hide,1)
SetGadgetState(#OPT_Left,1)
SetWindowCallback(@WindowCallback())
; ------------------------------------------------------------------------------------------------------
; MAIN LOOP
; ------------------------------------------------------------------------------------------------------
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_Gadget
Select EventGadget()
Case #BTN_Animate
AnimType = GetGadgetState(#OPT_Slide)
Visibility = GetGadgetState(#OPT_Hide)
If GetGadgetState(#OPT_Bottom) : Direction = 0 : EndIf
If GetGadgetState(#OPT_BottomLeft) : Direction = 1 : EndIf
If GetGadgetState(#OPT_BottomRight) : Direction = 2 : EndIf
If GetGadgetState(#OPT_Left) : Direction = 3 : EndIf
If GetGadgetState(#OPT_Right) : Direction = 4 : EndIf
If GetGadgetState(#OPT_Top) : Direction = 5 : EndIf
If GetGadgetState(#OPT_TopLeft) : Direction = 6 : EndIf
If GetGadgetState(#OPT_TopRight) : Direction = 7 : EndIf
If GetGadgetState(#OPT_Center) : Direction = 8 : EndIf
If AnimType : Flags | #AW_SLIDE : Else : Flags | #AW_BLEND : EndIf
If Visibility : Flags | #AW_HIDE : Else : Flags | #AW_ACTIVATE : EndIf
Select Direction
Case 0 : Flags | #AW_VER_POSITIVE
Case 1 : Flags | #AW_VER_POSITIVE | #AW_HOR_NEGATIVE
Case 2 : Flags | #AW_VER_POSITIVE | #AW_HOR_POSITIVE
Case 3 : Flags | #AW_HOR_NEGATIVE
Case 4 : Flags | #AW_HOR_POSITIVE
Case 5 : Flags | #AW_VER_NEGATIVE
Case 6 : Flags | #AW_VER_NEGATIVE | #AW_HOR_NEGATIVE
Case 7 : Flags | #AW_VER_NEGATIVE | #AW_HOR_POSITIVE
Case 8 : Flags | #AW_CENTER
EndSelect
AnimTime = Val(GetGadgetText(#STR_Time))
If Visibility
SetTimer_(WindowID(0),0,AnimTime + #HIDE_DELAY,0)
AnimateWindow_(WindowID(0),AnimTime,Flags) : Flags = 0
Else
ShowWindow_(WindowID(0),#SW_HIDE)
SetTimer_(WindowID(0),0,#SHOW_DELAY,0)
EndIf
EndSelect
EndIf
Until EventID = #PB_Event_CloseWindow
; ------------------------------------------------------------------------------------------------------
; FUNCTIONS
; ------------------------------------------------------------------------------------------------------
Procedure WindowCallback(hWnd.l,uMsg.l,wParam.l,lParam.l)
Result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_TIMER
If Flags & #AW_ACTIVATE
KillTimer_(WindowID(0),0)
AnimateWindow_(WindowID(0),AnimTime,Flags) : Flags = 0
InvalidateRect_(GadgetID(#STR_Time),0,0)
SetWindowPos_(GadgetID(#STR_Time),0,0,0,0,0,#SWP_NOMOVE | #SWP_NOSIZE | #SWP_FRAMECHANGED)
Else
KillTimer_(WindowID(0),0)
ShowWindow_(WindowID(0),#SW_SHOW)
EndIf
EndSelect
ProcedureReturn Result
EndProcedure