ReDraw-Probleme bei PlayMovie

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
teachco
Beiträge: 48
Registriert: 12.07.2005 19:44

ReDraw-Probleme bei PlayMovie

Beitrag von teachco »

Problem: Wenn man über ein laufendes Movie ein anderes Fenster zieht, dann wirkt das wie ein Radiergummi auf den Movie-Bereich. Bewegt man das Fenster mit dem Movie selbst, wird es wieder vervollständigt. Wie bekommt man einen korrekten Redraw nach Überlagerung hin? Oder liegt hier ein Fehler mit PlayMovie vor? Im Bsp. unten liegt das Movie auf einem Image-Gadget, was nicht dokumentiert ist.
Gadgets werden überlicherweise immer korrekt restauriert. Warum hier nicht? Gibt es ein Workaround? Vorschläge willkommen.

Gruß
Andi

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=1480&start=10&postdays=0&postorder=asc&highlight=
; Author: Danilo
; Date: 26. June 2003

; 
; by Danilo, 26.06.2003 - german forum 
; 
FileName$ = OpenFileRequester("Open","","Movies - AVI,MPG|*.avi;*.mpg",1) 
If FileName$ 
  If InitMovie() 
    OpenWindow(1,200,200,300,300,#PB_WINDOW_SYSTEMMENU,"MoviePlay-Test") 
    CreateGadgetList(WindowID()) 
    ImageGadget(2,5,5,300,290,0,#PB_Image_Border) 

    If LoadMovie(1,FileName$)=0 
      MessageRequester("ERROR","Cant load movie !",#MB_ICONERROR):End 
    EndIf 
    ResizeWindow(MovieWidth()+10,MovieHeight()+55) 
    ResizeGadget(2,5,5,MovieWidth(),MovieHeight()) 

    Length  = MovieLength() 
    FPS     = MovieInfo(0) / 1000 
    MHeight = MovieHeight() 
    MWidth  = MovieWidth() 
    TrackBarGadget(1,5,MHeight+10,MWidth-50,20,1,Length/FPS) 
    TextGadget(3,MWidth-45,MHeight+10,50,20,"0",#PB_Text_Right) 
    ButtonGadget(4,5,MHeight+35,60,20,"Pause") 
    ButtonGadget(5,70,MHeight+35,60,20,"Stop") 
    PlayMovie(1,GadgetID(2)) 

    Repeat 
      Select WindowEvent() 
        Case #PB_Event_CloseWindow : End 
        Case #PB_Event_Gadget 
          Select EventGadgetID() 
            Case 1 ; Trackbar 
              ;Debug EventType() 
              ;If EventType()=-1 
                MovieSeek(GetGadgetState(1)*FPS) 
                ;Beep_(800,10) 
              ;EndIf 
            Case 4 ; Pause 
              If GetGadgetText(4)="Pause" 
                PauseMovie() 
                SetGadgetText(4,"Resume") 
              Else 
                ResumeMovie() 
                SetGadgetText(4,"Pause") 
              EndIf 
            Case 5 ; Stop 
              StopMovie() 
              MovieSeek(1) 
          EndSelect 
          ;SetFocus_(WindowID()) 
        Default 
          Delay(1) 
          x = MovieStatus() 
          If x => 0 
            SetGadgetState(1,x/FPS) 
            SS = Int(x / FPS)           : While SS > 59:SS-60:Wend 
            MM = Int(x / FPS / 60)      : While MM > 59:MM-60:Wend 
            HH = Int(x / FPS / 60 / 60) : While HH > 59:HH-60:Wend 
            If oldSecond <> SS 
              SetGadgetText(3,RSet(StrU(HH,2),2,"0")+":"+RSet(StrU(MM,2),2,"0")+":"+RSet(StrU(SS,2),2,"0")) 
              oldSecond = SS 
            EndIf 
          EndIf 
          UpdateWindow_(WindowID()) 
      EndSelect 
    ForEver 
  Else 
    MessageRequester("ERROR","Cant init movie engine !",#MB_ICONERROR):End 
  EndIf 
EndIf 

; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; EOF
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Ein

Code: Alles auswählen

InvalidateRect_(GadgetID(2), 0, 0)
im Default-Zweig löst das Problem.
!UD2
Antworten