LIG: Scroll-Event oder Scrollen temporär deaktivieren

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
techniker
Beiträge: 160
Registriert: 27.01.2016 11:08
Wohnort: BY

LIG: Scroll-Event oder Scrollen temporär deaktivieren

Beitrag 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. :)
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

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

Beitrag von RSBasic »

Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
techniker
Beiträge: 160
Registriert: 27.01.2016 11:08
Wohnort: BY

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

Beitrag 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.
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

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

Beitrag von Fluid Byte »

techniker hat geschrieben:- Das Gadget darf nicht deaktiviert werden
Warum nicht?
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
techniker
Beiträge: 160
Registriert: 27.01.2016 11:08
Wohnort: BY

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

Beitrag 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. :|
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

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

Beitrag 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.
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
techniker
Beiträge: 160
Registriert: 27.01.2016 11:08
Wohnort: BY

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

Beitrag 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?
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
Benutzeravatar
Fluid Byte
Beiträge: 3110
Registriert: 27.09.2006 22:06
Wohnort: Berlin, Mitte

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

Beitrag 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
Windows 10 Pro, 64-Bit / Outtakes | Derek
Benutzeravatar
hjbremer
Beiträge: 822
Registriert: 27.02.2006 22:30
Computerausstattung: von gestern
Wohnort: Neumünster

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

Beitrag 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
Purebasic 5.70 x86 5.72 X 64 - Windows 10

Der Computer hat dem menschlichen Gehirn gegenüber nur einen Vorteil: Er wird benutzt
grüße hjbremer
Benutzeravatar
techniker
Beiträge: 160
Registriert: 27.01.2016 11:08
Wohnort: BY

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

Beitrag von techniker »

Läuft :allright:

Danke
Never change a running system - Never run a changed system!
(PB 6.03 LTS [x86])
Antworten