Seite 1 von 1

LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 26.01.2018 10:32
von techniker
Hallo,

Gibt es ein Event (oder API-Callback), dass auf scrollen eines ListIconGadget reagiert?

Oder besser:
Kann ich irgendwie temporär das Scrollen eines LIG deaktivieren?


Rahmenbedingungen:
- Das Gadget darf nicht deaktiviert werden
- Betriebssystem ist Windows - d.h. es ist auch API möglich
- PB-Version 5.61 (momentan noch x86)

Danke. :)

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 26.01.2018 10:35
von RSBasic

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 26.01.2018 10:37
von techniker
Aber dann ist die Scrollmöglichkeit komplett weg..? Oder? Das soll nicht sein.
Nur bei einem bestimmten Ereignis darf (vorübergehend) nicht mehr gescrollt werden.

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 28.01.2018 22:16
von Fluid Byte
techniker hat geschrieben:- Das Gadget darf nicht deaktiviert werden
Warum nicht?

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 28.01.2018 23:12
von techniker
Da das LIG "editierbar" ist..

D.h. das LIG ist per API das Eltern-Gadget und ein Stringgadget als Kind definiert.
Wenn ich nun das LIG deaktiviere bekomme ich keine Infos mehr, welche Zelle bearbeitet werden soll. :|

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 28.01.2018 23:28
von Fluid Byte
Wird dann etwas komplizierter. Es gibt viele Möglichkeiten zu scrollen: Scrollbar, Mausrad, Pfeiltasten. Das Problem ist das die Scrollbar keine eigenes Fenster ist sondern das was du siehst ist vom System selbst gemalt und ausgegeben.

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 28.01.2018 23:34
von techniker
Korrekt - und genau dass ist mein Problem..

Pfeiltasten habe/hatte ich schon abgefangen.
Aber wie mache ich es mit der Maus? (#WM_MOUSEWHEEL oder so ähnlich?)
Und wie mit den Scrollbalken?

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 28.01.2018 23:43
von Fluid Byte

Code: Alles auswählen

Global hwndPrevProc

OpenWindow(0,0,0,400,300,"",#PB_Window_SystemMenu | 1)
ListIconGadget(0,0,0,400,270,"derka",350,#PB_ListIcon_FullRowSelect)
ButtonGadget(1,0,270,400,30,"scrollen deaktivieren")

For i=1 To 100 : AddGadgetItem(0,-1,"derka derka jihad" + Str(i)) : Next

Procedure ListIconProc(hWnd,uMsg,wParam,lParam)	
	Select umsg
		Case #WM_VSCROLL
		ProcedureReturn 0
		
		Case #WM_MOUSEWHEEL
		ProcedureReturn 0
		
		Case #WM_KEYDOWN
		If wParam = #VK_UP Or  wParam = #VK_DOWN
			ProcedureReturn 0
		EndIf
	EndSelect
	
	ProcedureReturn CallWindowProc_(hwndPrevProc,hwnd,umsg,wparam,lparam)	
EndProcedure

Repeat 
   EventID = WaitWindowEvent() 
   
   If EventID = #PB_Event_Gadget And EventGadget() = 1   	   
   	Deactivated = 1 - Deactivated
   	
   	If Deactivated
   		hwndPrevProc = SetWindowLongPtr_(GadgetID(0),#GWLP_WNDPROC,@ListIconProc())
   		SetGadgetText(1,"scroll aktivieren")
   	Else
   		SetWindowLongPtr_(GadgetID(0),#GWLP_WNDPROC,hwndPrevProc)
   		SetGadgetText(1,"scroll deaktivieren")
   	EndIf
   EndIf
Until EventID = #PB_Event_CloseWindow

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 29.01.2018 00:38
von hjbremer
fast die gleiche Lösung

da es ein editierbares LV ist, hat er wahrscheinlich schon einen Callback fürs LV, der immer da ist.

Code: Alles auswählen

Enumeration
   #lig
   #butoff
   #buton
EndEnumeration

Global bflag

Procedure.i List_CB(hwnd, msg, wParam, lParam)   
    
      Protected oldproc = GetWindowLongPtr_(hwnd, #GWL_USERDATA)
      
      
      Select msg
         Case #WM_VSCROLL, #WM_HSCROLL, #WM_MOUSEWHEEL
            
            If bflag
               ProcedureReturn 0   
            EndIf
            
            ;case andere Messages wie keydown etc
            
      EndSelect
      
      ProcedureReturn CallWindowProc_(oldproc, hwnd, msg, wParam, lParam)     
   EndProcedure
   

OpenWindow(0, 0, 0, 500, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
   
    
   id = ListIconGadget(#lig,  10,  25, 400, 100, "Column 1", 100, #PB_ListIcon_FullRowSelect)
   
   oldproc_gadget = SetWindowLongPtr_(id, #GWL_WNDPROC, @List_CB())
   SetWindowLongPtr_(id, #GWL_USERDATA, oldproc_gadget)
   
  
   ButtonGadget(#butoff, 10, 140, 55, 22, "off")
   ButtonGadget(#buton , 10, 170, 55, 22, "on")
   
   
   For b = 2 To 4
      AddGadgetColumn(#lig, b, "Column " + Str(b), 65)
   Next
   
   For b = 0 To 20
      AddGadgetItem(#lig, b, "Item 1"+ Str(b)+Chr(10)+"Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4")
   Next
   
   Repeat : 
      event = WaitWindowEvent()
      
      Select event
        
         Case #PB_Event_Gadget
            
            Select EventGadget()

               Case #butoff: bflag = 1: Debug "butoff" + bflag
               Case #buton: bflag = 0: Debug "buton" + bflag
                                    
            EndSelect
      EndSelect
      
   Until Event = #PB_Event_CloseWindow

Re: LIG: Scroll-Event oder Scrollen temporär deaktivieren

Verfasst: 29.01.2018 07:54
von techniker
Läuft :allright:

Danke