Seite 1 von 1

ReDraw-Probleme bei PlayMovie

Verfasst: 14.08.2005 21:19
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

Verfasst: 14.08.2005 21:32
von Froggerprogger
Ein

Code: Alles auswählen

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