Fenster Animation

Für allgemeine Fragen zur Programmierung mit PureBasic.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Fenster Animation

Beitrag 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. :D Hoffe das wäre lösbar.
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Fenster Animation

Beitrag 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.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Fenster Animation

Beitrag von Lambda »

Ja :D , 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. :D Ich könnte schwören, dass Fenster fest miteinander verbunden werden können, damit alle Childs genauso herum fluppen.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Fenster Animation

Beitrag 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.
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3875
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: Fenster Animation

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Lambda
Beiträge: 526
Registriert: 16.06.2011 14:38

Re: Fenster Animation

Beitrag von Lambda »

Habe es selbst so (naja, etwas komplizierter :D ) 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! :D
Antworten