Ich habe mal ein Codebeispiel herausgekramt, in welchem das automatische Scrollen in einem Popupmenü funktioniert, wenn sich der Mauszeiger über dem Pfeil im Menü befindet. Vielleicht hilft es Dir weiter ...
Code: Alles auswählen
;***************************************************************************************************
;* erstellen Popupmenu *
;* =============================================================================================== *
;* - automatisches scrollen, wenn Maus auf Pfeilen *
;***************************************************************************************************
Global ia.l, winid, menuid, rec.RECT, curpos.POINT
ia=99 ;itemanzahl
Procedure WindowProc(hWnd,Msg,wParam,lParam)
Select Msg
; ------------ rechte maustaste im fenster gedrueckt ------------
Case #wm_rbuttondown
DisplayPopupMenu(0,WindowID(),0,0)
; ------------ menuepunkt im popupmenu ausgewaehlt (maus ueber menupunkt) ------------
Case #wm_menuselect
lw=wParam & $FFFF ;loword: menupunkt-nummer
; Debug "menupunkt " + Str(lw) + " mouseselect"
menunr=lw
hw=wParam >> 16 & $8000 ;highword: bit für flag "mouseselect" filtern
; Debug "flag " + Str(hw)
If hw=#mf_mouseselect
Debug "wm_menuselect/mf_mouseselect: menupunkt = " + Str(lw)
Debug "lparam="+Str(lParam) ;handle menue
; getmenuitemrect_(winid,menuid,menunr,rec)
EndIf
If hw=0 ;scroll-pfeil ausgewaehlt ?
Debug "pfeil"
; ------------ simuliere linke maustaste ------------
GetCursorPos_(cp.POINT)
mouse_event_(#mouseeventf_absolute | #mouseeventf_leftdown, cp\x, cp\y,0,0) ;simuliere linke maustaste
; Debug "autoscroll"
EndIf
; Case #pb_event_menu
; menuid=EventMenuID()
; Debug "menupunkt " + Str(menuid) + " mouseselect"
; ------------ menuepunkt geklickt ------------
Case #wm_command
If (wParam >> 16 & $FFFF) = 0 ;hw/wparam=0: nachricht ist von menue
; Debug "wm_command: " + Str(wparam & $FFFF)
MessageRequester("","Menupunkt =" + Str(wParam & $FFFF),0)
EndIf
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
;===================================================================================================
;= Hauptprogramm =
;===================================================================================================
winid=OpenWindow (0,200,200,600,400,#PB_Window_SystemMenu,"Test ...")
SetWindowCallback(@WindowProc())
menuid=CreatePopupMenu(0)
Debug "anzahl der menuepunkte = " + Str(ia)
For z=1 To ia
MenuItem(z,"Menuepunkt " + Str(z))
Next
Repeat
event=WaitWindowEvent()
Select event
; Case #pb_event_menu
; Debug "menuepunkt = " + Str(EventMenuID())
Case #PB_Event_CloseWindow
quit=1
EndSelect
Until quit=1
End
Hardy