LeftMouseKlick Event wird nicht erkannt

Für allgemeine Fragen zur Programmierung mit PureBasic.
MenschMarkus
Beiträge: 227
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

LeftMouseKlick Event wird nicht erkannt

Beitrag von MenschMarkus »

Hallo zusammen,

nach dem das Problem mit der Trackbar beim Abspielen eines Videos ja gelöst wurde [http://www.purebasic.fr/german/viewtopi ... =3&t=29921] entsteht bei weiter schreiten in diesem Projekt ein neues Problem.
Nachdem das Video gestoppt wurde, wollte ich eine Linie mittels 2DDraw Funktion LineXY() zeichnen. Dazu 2 LeftMouseKlick Events abfangen, Maus X/Y Positionen merken und zeichnen. Das Problem ist, sobald sich die Maus über dem Videobild im Fenster befindet, kommt kein WindowEvent() mehr an. Mausklicks können nicht mehr ausgelesen werden.

Hier habe ich in der Pocedure DrawLine() bewusst auf WaitWindowEvent() gesetzt, da hier mit der Maus gearbeitet wird. Selbst wenn ich hier auf WindowEvent() gehe wird der Mausklick nicht erfasst.

(Bitte erst Stop drücken und anschließend "Draw Me".)

Code: Alles auswählen

EnableExplicit

If Not InitMovie()
    MessageRequester("Fehler","Kann Movie Bibliothek nicht öffnen",#MB_ICONERROR)
    End
EndIf


Enumeration
    #moviewin
    #moviectrl
    #startstop01
    #speedup
    #tracbar
    #movie
    #drawimage
    #drawme
    #BasicImage
EndEnumeration

Global FileName.s
Global width.i, height.i, movielen.i, SlowmoThread.i, RunMovThread.i, position.q, speedpos.q
Global event.i, EventWin.i, ClickStatus.i=0

;OpenWindow(#moviewin,100,140,640,480,"Movie")
OpenWindow(#moviectrl,10,10,640,90,"Movie Control")
ButtonGadget(#startstop01,3,3,150,30,"Start/Stop",#PB_Button_Toggle)
ButtonGadget(#speedup,160,3,150,30,"Slowmo",#PB_Button_Toggle)
ButtonGadget(#drawme,320,3,150,30,"Draw Me")
TrackBarGadget(#tracbar,3,70,300,20,1,100)


Procedure tracbar(speedpos)
    SetGadgetState(#tracbar,speedpos)                            
EndProcedure

Procedure   playmov(value.i)
    If value = 0 ;start Movie
        PlayMovie(#movie,WindowID(#moviectrl))
    ElseIf value = 1 ;Pause movie
        PauseMovie(#movie)
    ElseIf value = 2 ;restart movie
        ResumeMovie(#movie)
    EndIf
EndProcedure

Procedure speedup(speedpos.i)
    Repeat
        speedpos + 1
        MovieSeek(#movie,speedpos)
        playmov(2)
        playmov(1)
        Delay(200)
        tracbar(speedpos)
        PostEvent(#tracbar,#moviectrl,#tracbar)
        SetWindowTitle(#moviectrl,"Movie Position: " + Str(speedpos))
    ForEver    
EndProcedure

Procedure Drawline()
    Protected mxposs.i, myposs.i, mxpose.i, mypose.i, ClickStatus.i = 0, ievent.i
    Repeat
        ievent = WaitWindowEvent()
        Debug ievent
        Select ievent
            Case #PB_Event_LeftClick
                Debug "WindowEvent(): " + Str(ievent)
                If ClickStatus = 0
                    Debug "Clickstatus: 0"
                    mxposs = WindowMouseX(#moviectrl)
                    myposs = WindowMouseY(#moviectrl)
                    ClickStatus + 1
                ElseIf ClickStatus = 1
                    Debug "Clickstatus: 1"
                    mxpose = WindowMouseX(#moviectrl)
                    mypose = WindowMouseY(#moviectrl)
                    ClickStatus + 1
                Else
                    Circle( 175,  175, 50, RGBA(255,   0,   0, 128))
                    LineXY(mxposs,myposs,mxpose,mypose,RGBA(255,0,0,128))
                EndIf
                Debug "Clickstatus: 2"
        EndSelect
        SetWindowTitle(#moviectrl,"mousex: " + Str(WindowMouseX(#moviectrl)) + "  /  mousey: " + Str(WindowMouseY(#moviectrl)))
        
    Until ClickStatus > 1
    LineXY(mxposs,myposs,mxpose,mypose,RGBA(255,0,0,128))
EndProcedure


FileName = OpenFileRequester("Movie","","Videodateien|*.avi;*.mpg;*.mkv|Alle Dateien|*.*",0)
If FileName <> ""
    If LoadMovie(#movie,FileName) = 0
        MessageRequester("Fehler","Konnte Videodatei nicht öffnen",#MB_ICONERROR)
        End
    Else
        width = MovieWidth(#movie)
        height = MovieHeight(#movie)
        movielen = MovieLength(#movie)
        SetGadgetAttribute(#tracbar,#PB_TrackBar_Maximum,movielen)
        ResizeWindow(#moviectrl,#PB_Ignore,#PB_Ignore,width,height+105)
        ResizeMovie(#movie,0,100,width,height)
        playmov(0)
        Repeat
            Delay(10)
            event = WindowEvent()
            EventWin = EventWindow()
            If EventWin = #moviectrl
                Select event
                    Case #PB_Event_Gadget
                        Select EventGadget()
                            Case #startstop01
                                If GetGadgetState(#startstop01) = 1
                                    position = MovieStatus(#movie)
                                    playmov(1)
                                    SetWindowTitle(#moviectrl,"Movie " + Str(position))
                                    DisableGadget(#speedup,1)
                                Else
                                    SetWindowTitle(#moviectrl,"Movie ")
                                    playmov(2)
                                    DisableGadget(#speedup,0)
                                EndIf
                            Case #speedup
                                If GetGadgetState(#speedup) = 1
                                    speedpos = MovieStatus(#movie)
                                    playmov(1)
                                    SlowmoThread = CreateThread(@speedup(),speedpos)
                                    If IsThread(SlowmoThread)
                                        DisableGadget(#startstop01,1)
                                    EndIf
                                Else
                                    If IsThread(SlowmoThread)
                                        KillThread(SlowmoThread)
                                        DisableGadget(#startstop01,0)
                                    EndIf
                                    playmov(2)
                                EndIf
                            Case #tracbar
                                If GetGadgetState(#startstop01) = 1
                                    speedpos = GetGadgetState(#tracbar)
                                    MovieSeek(#movie,speedpos)
                                    playmov(2)
                                    playmov(1)
                                    SetGadgetState(#tracbar,speedpos)
                                EndIf
                            Case #drawme
                                If  CreateImage(#drawme,width,height,32) And StartDrawing(ImageOutput(#drawme))
                                    DrawingMode(#PB_2DDrawing_AlphaChannel)
                                    Box(0, 0, width, height, $00000000)
                                    DrawingMode(#PB_2DDrawing_AlphaBlend)
                                    Circle( 75,  75, 50, RGBA(255,   0,   0, 128))
                                    Circle(125,  75, 50, RGBA(  0, 255,   0, 128))
                                    Circle(100, 125, 50, RGBA(  0,   0, 255, 128))
                                    Drawline()
                                    DrawImage(ImageID(#drawme),0,0)
                                    StopDrawing()
                                    ImageGadget(#BasicImage,0,100,0,0,ImageID(#drawme))
                                EndIf
                        EndSelect
                    Case #PB_Event_CloseWindow
                        Break
                    Default
                        speedpos = MovieStatus(#movie)
                        If speedpos > 0
                            SetGadgetState(#tracbar,speedpos)
                        EndIf
                EndSelect
            Else
                Select event
                    Case #PB_Event_Gadget
                        Select EventGadget()
                            Case 0
                                
                            Default
                                Debug EventGadget()
                        EndSelect
                EndSelect
            EndIf
        ForEver
        StopMovie(#movie)
        FreeMovie(#movie)
    EndIf
EndIf
End 
Mir ist nicht ganz eingängig warum das über dem Videobild zu einem Problem führt und was ich dagegen tun kann.

.
Wissen schadet nur dem, der es nicht hat !
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: LeftMouseKlick Event wird nicht erkannt

Beitrag von True29 »

was soll der user damit anstellen ?
ich frage nur weil es würde vielelicht helfen eine passende funktion zu bauen.
momentan macht es für mich wenig sinn auf einem film eine linie zu ziehen ;)
i7,12gb ram , Windows 10 ,Purebasic 5.50
MenschMarkus
Beiträge: 227
Registriert: 30.04.2009 21:21
Computerausstattung: i5-2300 (2.8 Ghz) Win10 -64bit / PB 5.73 LTS

Re: LeftMouseKlick Event wird nicht erkannt

Beitrag von MenschMarkus »

True29 hat geschrieben:was soll der user damit anstellen ?
Es geht um eine Positionsanzeige einer Achse auf einem Standbild. Daher eine Linie. Das lässt sich ja auch beliebig erweitern um etwas zu zeichnen, einzukreisen usw.
Wissen schadet nur dem, der es nicht hat !
True29
Beiträge: 283
Registriert: 18.08.2012 19:18
Computerausstattung: Windows 8 64bit .Profan x2,Purebasic 5.5
Wohnort: Worms
Kontaktdaten:

Re: LeftMouseKlick Event wird nicht erkannt

Beitrag von True29 »

hm . um eine achse zu setzten könntest du auch eine tastatur eingabe benutzten . falls das mit der maus nicht klappt.
könntest mit der achse in der mitte beginnen und mit den cursor tasten die positon anpassen lassen.
Ich habe leider keine erfahrung wie das mit videos ist vielleicht meldet sich hier noch jemand.
i7,12gb ram , Windows 10 ,Purebasic 5.50
Antworten