Seite 1 von 2

Problem beim Resizen...

Verfasst: 27.09.2005 17:43
von Blackskyliner
Hallo warum bekommt der nicht mit das ich das Fenster Resize?

Code: Alles auswählen

      If OpenWindow(#Window_Movie, 0,0, MovieWidth(), MovieHeight()+25 ,#PB_Window_SystemMenu|#PB_Window_SizeGadget, "Movie - Fenster")
        
        If CreateGadgetList(WindowID(#Window_Movie))
          ImageGadget(#Movie_RenderFrame, 0,0,WindowWidth(),WindowHeight()-25,0,#PB_Image_Border)
          PlayMovie(#AUDIO_ID,GadgetID(#Movie_RenderFrame)) 
        Else
          MessageRequester("Fehler!", "Das Fenster konnte leider nicht geladen werden...")
        EndIf
        
        Repeat
          If WindowEvent() = #PB_Event_SizeWindow 
              Debug 1
              ResizeGadget(#Movie_RenderFrame, -1, -1, WindowWidth(), WindowHeight() - 25) 
              ; For i=#Movie_Start To #Movie_Position
                ; If IsGadget(i)
                  ; ResizeGadget(i, -1, WindowHeight() - 45, -1, -1) 
                ; EndIf 
              ; Next 
            EndIf 
          Delay(1)
        Until WindowEvent() = #PB_Event_CloseWindow
      Else
        MessageRequester("Fehler!", "Das Fenster zum abspielen konnte nicht geöffnet werden.")
      EndIf 

Verfasst: 27.09.2005 18:27
von ts-soft
Wie wäre es mit einem funktionierenden Beispielcode in dem der Fehler auftritt?
Abgesehen davon benutzte schon wieder WindowEvent(). Das ist höchstens für Fullscreen-Spiele geeignet.
Wenn für den Testcode irgendwelche Dateien gebraucht werden, dann nehm einen OpenFileRequester oder Dateien aus dem PureBasic Examples-Ordner, so das für einen Test nur der Pfad anzupassen ist.

Verfasst: 27.09.2005 18:30
von Blackskyliner

Code: Alles auswählen

Procedure Movie(movie.s)
  If InitMovie()
    If LoadMovie(#AUDIO_ID, movie)
      If OpenWindow(#Window_Movie, 0,0, MovieWidth(), MovieHeight()+25 ,#PB_Window_SystemMenu|#PB_Window_SizeGadget, "Movie - Fenster")
        
        If CreateGadgetList(WindowID(#Window_Movie))
          ImageGadget(#Movie_RenderFrame, 0,0,WindowWidth(),WindowHeight()-25,0,#PB_Image_Border)
          PlayMovie(#AUDIO_ID,GadgetID(#Movie_RenderFrame)) 
        Else
          MessageRequester("Fehler!", "Das Fenster konnte leider nicht geladen werden...")
        EndIf
        
        Repeat
          If WindowEvent() = #PB_Event_SizeWindow 
              Debug 1
              ResizeGadget(#Movie_RenderFrame, -1, -1, WindowWidth(), WindowHeight() - 25) 
              ; For i=#Movie_Start To #Movie_Position
                ; If IsGadget(i)
                  ; ResizeGadget(i, -1, WindowHeight() - 45, -1, -1) 
                ; EndIf 
              ; Next 
            EndIf 
          Delay(1)
        Until WindowEvent() = #PB_Event_CloseWindow
      Else
        MessageRequester("Fehler!", "Das Fenster zum abspielen konnte nicht geöffnet werden.")
      EndIf 
    Else
      MessageRequester("Fehler!", "Film konnte nicht geladen werden.") 
    EndIf
  Else
    MessageRequester("Fehler!", "Der Film konnte nicht Initialisiert werden, überprüfen sie ob sie DirectX installiert haben.")
  EndIf
EndProcedure

Movie("C:\Downloads\funsync.de....a0001....wenn_der_doener_zweimal_schimmelt.avi")
EDIT:
Ich beutze das WindowEvent wegen Playlist liederwechsel, werd das aber nochmal überarbeiten....

Verfasst: 29.09.2005 09:35
von HeX0R
Mit dem Code geht dir jede zweite Window-Message flöten...

Überlege dir, wenn an dieser Stelle der SizeEvent kam:

Code: Alles auswählen

Until WindowEvent() = #PB_Event_CloseWindow
hast du ihn ins Nirvana geschossen.

Verfasst: 29.09.2005 10:20
von Kiffi

Code: Alles auswählen

If OpenWindow([...])
  
  If CreateGadgetList(WindowID(#Window_Movie))
    [...]
  EndIf
  
  Quit = #False
  
  Repeat
    
    WaitWindowEvent = WaitWindowEvent()
    
    Select WaitWindowEvent
      
      Case #PB_Event_SizeWindow
        ; Dein Code zum resizen
        
      Case #PB_Event_CloseWindow 
        Quit = #True
        
    EndSelect
    
  Until Quit = #True
  
EndIf
Grüße ... Kiffi

Verfasst: 29.09.2005 15:29
von MLK
hört doch endlich auf mit dieser ekligen hauptschleife. ok, so steht sie in der hilfe, aber das dient auch nur der verdeutlichung.

Code: Alles auswählen

   Repeat 
      Select WaitWindowEvent()
         Case #PB_Event_SizeWindow 
            ; Dein Code zum resizen 
            
         Case #PB_Event_CloseWindow 
            Break 
      EndSelect  
   ForEver

Verfasst: 29.09.2005 15:32
von Kiffi
> hört doch endlich auf mit dieser ekligen hauptschleife.

Wie meinen? Was ist jetzt an meinem Beispiel 'ekliger' als an Deinem?

Grüße ... Kiffi

Verfasst: 29.09.2005 15:37
von ts-soft
Das ist ja mehr eine Stil-Frage und sollte man schon dem Programmierer überlassen :wink: . Der Grundsätzliche Aufbau ist ja in beiden Beispielen deutlich geworden. Die Forever-Variante setze ich persönlich selten ein, wobei ich nicht weiß warum :freak: . Das Select bevorzuge ich auch, wobei ich auch manchmal If EndIf verwende.

Verfasst: 29.09.2005 16:05
von andi256
@MLK

also ein "Break" im code find ich hässlicher ... ist aber wie ts-soft schreibt geschmackssache

Verfasst: 29.09.2005 17:10
von MLK
jo, hat ts recht, ist geschmacksache. wollte damit auch nicht kiffi anmachen, deshalb schrieb ich ja "hört" nicht "hör". aber ich kanns nicht mehr sehen, und will etwas gegen die ewige weitergabe dieser uralten, noch vor break entstandenen, pb_hilfe-schleife tun.