hi,
andreas hat geschrieben:
Gibt es bei einem Fenster die Möglichkeit auf Scrollrad der Maus zu reagieren und Drawingarea zu scrollen und wenn ja, wie kann ich es lösen?
grundsätzlich geht das ja über "o:wheel()" welche den Event
xbeM_Wheel erzeugt.
Code: Alles auswählen
oDlg:DrawingArea:wheel := {|aPos,aWheel,obj| DlgWheel (aWheel,aoChild,aoDisplay) }
nun leite ich das o:wheel auf dem Scrollbar um :
Code: Alles auswählen
PROCEDURE DlgWheel(aWheel,aoChild,aoDisplay)
IF aWheel[2] < 0
aoChild[CH_BAR]:setData( aoChild[CH_BAR]:getData()+1 )
Scroll2bar( aoChild[CH_BAR]:getData(), XBPSB_NEXTPOS, aoChild[CH_WMP], aoChild[CH_BAR], aoDisplay[PA_POSI], aoChild[CH_STATBAR], aoChild[CH_STATBAR]:oLauf)
ELSE
aoChild[CH_BAR]:setData( aoChild[CH_BAR]:getData()-1 )
Scroll2bar( aoChild[CH_BAR]:getData(), XBPSB_PREVPOS, aoChild[CH_WMP], aoChild[CH_BAR], aoDisplay[PA_POSI], aoChild[CH_STATBAR], aoChild[CH_STATBAR]:oLauf)
ENDIF
RETURN
ob das "richtig" ist weiss ich nicht, aber es funktionert.
nun noch die Function Scroll2bar()
Code: Alles auswählen
FUNCTION Scroll2bar( nScrlPos,nCommand, ...)
...
DO CASE
CASE nCommand == XBPSB_ENDTRACK // must be 1st (!)
CASE nCommand == XBPSB_PREVPOS
...
CASE nCommand == XBPSB_NEXTPOS
...
CASE nCommand == XBPSB_PREVPAGE
CASE nCommand == XBPSB_NEXTPAGE
CASE nCommand == XBPSB_SLIDERTRACK
...
CASE nCommand == XBPSB_ENDSCROLL
ENDCASE
RETURN NIL
nun muss du "nur" noch die Stellen "_PREVPOS / _NEXTPOS" sowie
"XBPSB_SLIDERTRACK" füllen mit deiner "Action".
gruss by OHR
Jimmy