ListIconGadget, detect Column Header press??
ListIconGadget, detect Column Header press??
Is there a method of detecting a mouse click/press for a column header in ListIconGadget?
Re: ListIconGadget, detect Column Header press??
Here's some code that might help...
Code: Select all
; =================================================================
;
; Author: Shardik
; Date: January 27th, 2015
; Explain: Get ListIconGadget column
;
; Typical Usage:
;
; File Name: Get Column Info.pb
; =================================================================
Enumeration
#MainForm
EndEnumeration
Enumeration Gadget
#MyListIcon
EndEnumeration
Procedure OnListIconCLick(WindowID, message, wParam, lParam)
Result = #PB_ProcessPureBasicEvents
Select message
Case #WM_NOTIFY
*nmITEM.NMITEMACTIVATE = lParam
Select *nmITEM\hdr\code
Case #LVN_COLUMNCLICK ;/ HeaderClick
If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
Debug " header col = " + Str(*nmITEM\iSubItem)
Result = #True
EndIf
Case #NM_CLICK ;/ CellClick (Your question)
If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
Debug "row = " + Str(*nmITEM\iItem) + ", col = "+Str(*nmITEM\iSubItem) + ", content = "+ GetGadgetItemText(#MyListIcon, *nmITEM\iItem,*nmITEM\iSubItem)
Result = #True
EndIf
Case #NM_DBLCLK
Debug "left doubleclick"
;Your code
Case #NM_RCLICK
Debug "right click"
;Your code
Case #NM_RDBLCLK
Debug "right doubleclick"
;Your code
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Procedure Start()
Protected n, Buffer.s
OpenWindow(#MainForm, 0, 0, 500, 500, "Listicon gadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowCallback(@OnListIconCLick(), #MainForm)
ListIconGadget(#MyListIcon, 10, 10, 480, 400, "Col 0", 100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#MyListIcon, 1, "Col 1", 100)
AddGadgetColumn(#MyListIcon, 2, "Col 2", 100)
For n=0 To 10
Buffer = "Item " + Str(n) + Chr(10) + "Result Col 1=" + Str(n) + Chr(10) + "Result Col 2=" + Str(n)
AddGadgetItem(#MyListIcon, -1, Buffer)
Next
Repeat : Until WaitWindowEvent(10) = #PB_Event_CloseWindow
EndProcedure
Start()
- It was too lonely at the top.
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
System : PB 6.21(x64) and Win 11 Pro (x64)
Hardware: AMD Ryzen 9 5900X w/64 gigs Ram, AMD RX 6950 XT Graphics w/16gigs Mem
Re: ListIconGadget, detect Column Header press??
Thank you blueb. Is there a way of doing this without rhe SetWindowCallback?
Re: ListIconGadget, detect Column Header press??
Afraid not, and I agree one should not have to go this route. It's missing in the PB library. Then again, grid functionality is non-existent up to this point in time. Let's hope for improvements... 

Re: ListIconGadget, detect Column Header press??
What is your OS(Windows,Linux or Mac)?
Egypt my love
Re: ListIconGadget, detect Column Header press??
Here I posted a cross-platform example.
Re: ListIconGadget, detect Column Header press??
You can also create your own EventTypes globally 
Base from Shardik

Base from Shardik
Code: Select all
; =================================================================
;
; Author: Shardik
; Date: January 27th, 2015
; Explain: Get ListIconGadget column
;
; Typical Usage:
;
; File Name: Get Column Info.pb
; =================================================================
Enumeration
#MainForm
EndEnumeration
Enumeration Gadget 1
#MyListIcon
EndEnumeration
Enumeration #PB_EventType_FirstCustomValue
#MyEventType_ColumnClick
#MyEventType_CellClick
EndEnumeration
Procedure OnListIconCLick(WindowID, message, wParam, lParam)
Protected Result = #PB_ProcessPureBasicEvents
Protected Gadget
Select message
Case #WM_NOTIFY
*nmITEM.NMITEMACTIVATE = lParam
Select *nmITEM\hdr\code
Case #LVN_COLUMNCLICK ;/ HeaderClick
Gadget = GetProp_(*nmITEM\hdr\hwndFrom, "pb_id")
If IsGadget(gadget) And GadgetType(Gadget) = #PB_GadgetType_ListIcon
PostEvent(#PB_Event_Gadget, GetActiveWindow(), Gadget, #MyEventType_ColumnClick, *nmITEM\iSubItem)
EndIf
; If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
; Debug " header col = " + Str(*nmITEM\iSubItem)
; Result = #True
; EndIf
Case #NM_CLICK ;/ CellClick (Your question)
Gadget = GetProp_(*nmITEM\hdr\hwndFrom, "pb_id")
If IsGadget(gadget) And GadgetType(Gadget) = #PB_GadgetType_ListIcon
PostEvent(#PB_Event_Gadget, GetActiveWindow(), Gadget, #MyEventType_CellClick, (*nmITEM\iSubItem << 16) | *nmITEM\iItem)
EndIf
; If *nmITEM\hdr\hwndFrom = GadgetID(#MyListIcon) ;/ ListIconGadget
; Debug "row = " + Str(*nmITEM\iItem) + ", col = "+Str(*nmITEM\iSubItem) + ", content = "+ GetGadgetItemText(#MyListIcon, *nmITEM\iItem,*nmITEM\iSubItem)
; Result = #True
; EndIf
Case #NM_DBLCLK
Debug "left doubleclick"
;Your code
Case #NM_RCLICK
Debug "right click"
;Your code
Case #NM_RDBLCLK
Debug "right doubleclick"
;Your code
EndSelect
EndSelect
ProcedureReturn Result
EndProcedure
Procedure Start()
Protected n, Buffer.s
OpenWindow(#MainForm, 0, 0, 500, 500, "Listicon gadget", #PB_Window_SystemMenu|#PB_Window_ScreenCentered)
SetWindowCallback(@OnListIconCLick(), #MainForm)
ListIconGadget(#MyListIcon, 10, 10, 480, 400, "Col 0", 100, #PB_ListIcon_FullRowSelect)
AddGadgetColumn(#MyListIcon, 1, "Col 1", 100)
AddGadgetColumn(#MyListIcon, 2, "Col 2", 100)
For n=0 To 10
Buffer = "Item " + Str(n) + Chr(10) + "Result Col 1=" + Str(n) + Chr(10) + "Result Col 2=" + Str(n)
AddGadgetItem(#MyListIcon, -1, Buffer)
Next
Repeat
Select WaitWindowEvent(10)
Case #PB_Event_CloseWindow
Break
Case #PB_Event_Gadget
Select EventGadget()
Case #MyListIcon
Select EventType()
Case #MyEventType_ColumnClick
Debug "#MyEventType_ColumnClick: Column " + EventData()
Case #MyEventType_CellClick
Debug "#MyEventType_CellClick: Column " + Str(EventData() >> 16) + " / Row " + Str(EventData() & $FFFF)
EndSelect
EndSelect
EndSelect
ForEver
EndProcedure
Start()
My Projects ThreadToGUI / OOP-BaseClass / EventDesigner V3
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive
PB v3.30 / v5.75 - OS Mac Mini OSX 10.xx - VM Window Pro / Linux Ubuntu
Downloads on my Webspace / OneDrive