Seite 1 von 1

Animate Window

Verfasst: 27.04.2007 16:14
von Fluid Byte
Vielleicht nützt es ja wem.

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

Verfasst: 27.04.2007 16:31
von AND51
> Vielleicht nützt es ja wem.
Kannst du Gedanken lesen? Bild

Ist das hier alles?
> ShowWindow_(WindowID(0),#SW_SHOW)


Außerdem funktioniert deine "Methode" auch nicht vollständig: Nach deiner Blending Animation+Activating (dauer: 600 ms) ist dein StringGadget verschwunden. :o
Es erscheint erst wiede,r wenn man mit der Maus drüber fährt. und selbst dann auch nur sein Umriss. Es ist erst wieder zu 100% da, wenn man reinklickt.

Soll ich dir nen Vidoe davon schicken?

Verfasst: 27.04.2007 17:12
von Fluid Byte
Soll ich dir nen Vidoe davon schicken?
Nö lass ma', Ich kenn' den Fehler. Habs korrigiert.

Verfasst: 27.04.2007 17:42
von HeX0R
Ich würde evtl. deine Email-Addy ausm Code verfälschen, wenn du ned unbedingt mit Müll vollgekackt werden willst.
(Es sei denn du stehst drauf... kann ja sein ;) )

Verfasst: 27.04.2007 18:02
von Fluid Byte
Mein Spamfilter funktioniert herrvorragend. Von 100 emails kommt genau eine durch und wird auch noch als "verdächtig" makiert. Bild

Verfasst: 27.04.2007 18:20
von AND51
Idee: Es gibt doch einen Befehl, um ein Fenster transparent zu machen, man übergibt einen Wert von 1 bis 255.
In PBSOL oder Doopys Lib hieß der Befehl SetWindowsTransparency(). Dann zähl ich das mit ner FOR-Schleife hoch. Wenn das funktioniert, wie ich mir das vorstelle, dann brauch ich keinen Refresh.

Verfasst: 27.04.2007 19:00
von Fluid Byte
SetLayeredWindowAttributes_()

Verfasst: 06.05.2007 21:50
von Xaby
So ein Quatsch :lol:

Aber ich find's cool :mrgreen:

:allright: :allright: :allright: