MouseOver Scrolling im Kontextmenü

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

MouseOver Scrolling im Kontextmenü

Beitrag von Lukaso »

Hallo,

ich habe ein Kontextmenü (Rechtsklickmenü) in meinem Player, darin habe ich eine Unterrubrik Namens "Playlist" darin sind alle Musikstücke drinn, nun habe ich dort ein Menü mit 500 Musikdateien. Das Menü ist jetzt Größer wie der Bildschirm, nun habe ich dort 2 Pfeile um das Menü Hach bzw. Runterzuscrollen. Das Problem ich muß auf die Pfeile Klicken und draufbleiben damit er scrollt, ich möchte es aber so machen wie im Startmenü, dass es reicht mit der Maus über den Pfeil zu Fahren damit gescrollt wird. Desweiteren würde ich gerne die Scrollgeschwindigkeit erhöhen.

Hat jemand eine Lösung für mich??

Danke :allright:

Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
hardy
Beiträge: 19
Registriert: 04.11.2004 00:16
Wohnort: Erfurt

Beitrag von hardy »

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
Benutzeravatar
Lukaso
Beiträge: 720
Registriert: 08.09.2004 18:51
Wohnort: Oberkirch
Kontaktdaten:

Beitrag von Lukaso »

@hardy
Habs damit hinbekommen!
Danke sehr :allright:

MFG Lukaso
Nextgen Guild Wars Fanseite: Guild Wars Tactics (Pseudo-Admin + Developer)
"Das Fluchen ist die einzige Sprache, die jeder Programmierer beherrscht." - Unbekannter Autor
Antworten