Seite 1 von 1
Fenster Animation
Verfasst: 14.03.2013 16:08
von Lambda
Habe gerade das Problem, dass Child-Windows erst sichtbar werden sollen wenn die maximier-Animation beendet ist. Noch besser wäre es, wenn diese an die Animation angebunden wären.

Hoffe das wäre lösbar.
Re: Fenster Animation
Verfasst: 14.03.2013 17:56
von STARGÅTE
Offtopic: Echt lustig anderen bei der Arbeit zu zusehen (in der Art, welche Fragen sie im Forum stellen) ^^
Wiedermal muss ich nachfragen: Was ist eine "maximier-Animation"?
Wenn ich auf maximieren klicke, ist das Fenster augenblicklich im Vollbild.
Re: Fenster Animation
Verfasst: 14.03.2013 18:53
von Lambda
Ja

, leider gibt es gewisse Fragen die man als Windows Nutzer für Linux oder Mac nicht weis. Auch Windows hat manch seltsame Probleme wie momentan z.B #WM_NCLBUTTTONUP - andere Geschichte, aber nicht nur mit PB ein Problem.
Ab Vista gibt es diese "Transition"-Effekte. Beim mini-/maximieren fluppt das Fenster dann in einer Animation nach unten/oben. Beim Minimieren kein Problem, da alle Childs sofort ausgeblendet werden. Doch beim Maximieren sind die Childs sofort sichtbar während das Fenster noch am kommen ist.
Natürlich könnte man ein Delay nehmen, aber das ist definitiv zu ranzig und unzuverlässig.

Ich könnte schwören, dass Fenster fest miteinander verbunden werden können, damit alle Childs genauso herum fluppen.
Re: Fenster Animation
Verfasst: 15.03.2013 10:30
von Lambda
Am besten wäre es das layered Window mit dem eigentlichen Fenster zu verbinden, wodurch es die selbe Transformation erlebt wie das Fenster. Die Frage ist nur wie diese verbunden werden können, denn das layered Window ist im non-client Bereich platziert, wodurch SetParent_ schonmal wegfällt.
Re: Fenster Animation
Verfasst: 15.03.2013 16:29
von bobobo
hab nur das olle XP, da geht aber folgendes.
Das Sklavenfenster erscheint erst wenn die dürre XP-windowanimation fertig ist
weiß aber nicht ob es Deinen anspruchsvollen Zielen genügt.
Code: Alles auswählen
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
; Windows füllt die Parameter automatisch, welche wir im Callback verwenden...
If uMsg = #WM_SIZE
HideWindow(1,1)
Select wParam
Case #SIZE_MINIMIZED
Debug "Fenster wurde minimiert"
Case #SIZE_RESTORED
Debug "Fenster wurde wiederhergestellt"
HideWindow(1,0)
Case #SIZE_MAXIMIZED
Debug "Fenster wurde maximiert"
EndSelect
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
OpenWindow(0,0,0,400,400,"master",#PB_Window_Invisible|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
SetWindowCallback(@WinCallback()) ; Callback aktivieren
OpenWindow(1,10,10,200,200,"slave",#PB_Window_Invisible|#PB_Window_Tool|#PB_Window_ScreenCentered|#PB_Window_SizeGadget|#PB_Window_MaximizeGadget|#PB_Window_MinimizeGadget)
StickyWindow(1,1)
HideWindow(0,0)
HideWindow(1,0)
Repeat
Until WaitWindowEvent()=#PB_Event_CloseWindow
End
Re: Fenster Animation
Verfasst: 15.03.2013 17:17
von Lambda
Habe es selbst so (naja, etwas komplizierter

) gelöst. Allerdings muss vor dem Anzeigen ein 300 ms Delay rein, denn die Nachricht tritt direkt beim maximieren auf, während das Fenster noch fluppt.
Die korrekten Nachrichten zu erwischen war etwas happig, da mit Debugger und mit MessageRequester völlig verschiedene Werte kamen. ^^
Code: Alles auswählen
Select msg
Case #WM_WINDOWPOSCHANGED
Select lParam
Case 1638132
; Verstecken
Case 1636796
Delay(300)
; Anzeigen
EndSelect
EndSelect
Dennoch wäre ein natives anheften hübscher!
