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
Danke