Disable Listicon Selection Color?
Disable Listicon Selection Color?
Hello, I have a Listicon where i have a custom color for each line (SetGadgetItemColor). Now when i select a line the color disappears and the default blue selection color shows instead. Is it possible to deactivate the selection color so it always just shows the custom color i set?
Re: Disable Listicon Selection Color?
Not supported by Windows, but here's a quick hack:
Code: Select all
#LI = 0
#CustomLIGSelectionColor = $ABFCAB
Global oldCallback,ListIcon,LIColor,Oldr,Oldc,editflag
Procedure LIcallback(hwnd, msg, wparam, lparam)
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_LBUTTONDOWN
SetGadgetState(#LI,-1)
pInfo.LVHITTESTINFO
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(ListIcon,#LVM_SUBITEMHITTEST,0,@pInfo)
For jj = 0 To CountGadgetItems(#LI)-1
SetGadgetItemColor(#LI, jj, #PB_Gadget_BackColor, #White)
Next
SetGadgetItemColor(#LI, pInfo\iItem, #PB_Gadget_BackColor, #CustomLIGSelectionColor)
Oldr = pInfo\iItem
Oldc = pInfo\iSubItem
EndSelect
ProcedureReturn result
EndProcedure
Procedure CustomLIG(gnumber, x, y, w, h, numC=3, numR=16)
ListIcon = ListIconGadget(gnumber,10,10,620,460,"Column 0",0,#PB_ListIcon_GridLines )
AddGadgetColumn(gnumber,1,"Column 1",200)
AddGadgetColumn(gnumber,2,"Column 2",200)
AddGadgetColumn(gnumber,3,"Column 3",200)
For i = 0 To numR-1
AddGadgetItem(gnumber, -1, Chr(10)+"Text in Column 1"+Chr(10)+"Text in Column 2" + Chr(10)+"Text in Column 3" + Chr(10)+"")
Next
oldCallback = SetWindowLongPtr_(ListIcon, #GWL_WNDPROC, @LIcallback())
EndProcedure
LoadFont(0,"Tahoma",10)
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
CustomLIG(#LI, 40, 40, 450, 300, 3, 10)
SetGadgetFont(#LI,FontID(0)) : SetGadgetFont(2 ,FontID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Re: Disable Listicon Selection Color?
Hi
For Windows
Simple as I can
For Windows
Simple as I can
Code: Select all
Import "UxTheme.lib"
SetWindowTheme(hWnd, Body.p-unicode, pszSubIdList)
EndImport
If OpenWindow(0, 0, 0, 500, 300, "Set Select Color", #PB_Window_SystemMenu|#PB_Window_ScreenCentered | #PB_Window_SizeGadget)
CreateStatusBar(0, WindowID(0))
ListIconGadget(0, 10, 10, 480, 255, "Column 0", 200, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection)
AddGadgetColumn(0, 1, "Column 1", 200)
AddGadgetColumn(0, 2, "Column 2", 200)
For a=0 To 9
addtext$ = "Column 0 item # " + Str(a) + Chr(10) + "Column 1 item # " + Str(a) + Chr(10) + "Column 2 item # " + Str(a)
AddGadgetItem(0,-1, addtext$)
If a % 2
SetGadgetItemColor(0,a, #PB_Gadget_BackColor,$ACFEFD)
SetGadgetItemColor(0,a, #PB_Gadget_FrontColor,$FF0806)
Else
SetGadgetItemColor(0,a, #PB_Gadget_BackColor,$FFFFFF)
SetGadgetItemColor(0,a, #PB_Gadget_FrontColor,$0)
EndIf
Next
SetWindowTheme(GadgetID(0), "EXPLORER", 0)
Repeat
event = WaitWindowEvent()
Until event = #PB_Event_CloseWindow
EndIf
Egypt my love
Re: Disable Listicon Selection Color?
Maybe a little improvement to firace code:
Code: Select all
#LI = 0
#CustomLIGSelectionColor = $ABFCAB
Global oldCallback,ListIcon,LIColor,Oldr,Oldc,editflag
Procedure LIcallback(hwnd, msg, wparam, lparam)
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_LBUTTONDOWN
SetGadgetState(#LI,-1)
pInfo.LVHITTESTINFO
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(ListIcon,#LVM_SUBITEMHITTEST,0,@pInfo)
For jj = 0 To CountGadgetItems(#LI)-1
SetGadgetItemColor(#LI, jj, #PB_Gadget_BackColor, #White)
If jj&1
SetGadgetItemColor(#LI, jj, #PB_Gadget_BackColor, $EFEFEF)
EndIf
Next
SetGadgetItemColor(#LI, pInfo\iItem, #PB_Gadget_BackColor, #CustomLIGSelectionColor)
Oldr = pInfo\iItem
Oldc = pInfo\iSubItem
EndSelect
ProcedureReturn result
EndProcedure
Procedure CustomLIG(gnumber, x, y, w, h, numC=3, numR=16)
ListIcon = ListIconGadget(gnumber,10,10,620,460,"Column 0",0,#PB_ListIcon_GridLines )
AddGadgetColumn(gnumber,1,"Column 1",200)
AddGadgetColumn(gnumber,2,"Column 2",200)
AddGadgetColumn(gnumber,3,"Column 3",200)
For i = 0 To numR-1
AddGadgetItem(gnumber, -1, Chr(10)+"Text in Column 1"+Chr(10)+"Text in Column 2" + Chr(10)+"Text in Column 3" + Chr(10)+"")
If i&1
SetGadgetItemColor(gnumber, i, #PB_Gadget_BackColor, $EFEFEF)
EndIf
Next
oldCallback = SetWindowLongPtr_(ListIcon, #GWL_WNDPROC, @LIcallback())
EndProcedure
LoadFont(0,"Tahoma",10)
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered)
CustomLIG(#LI, 40, 40, 450, 300, 3, 10)
SetGadgetFont(#LI,FontID(0)) : SetGadgetFont(2 ,FontID(0))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow

Re: Disable Listicon Selection Color?
Ok this is almost what i want, when i now select a line the background color changes to green, is it possible for the background color not to change at all and stay whatever i set the background to with SetGadgetItemColor before?
Re: Disable Listicon Selection Color?
Windows workaround
Code: Select all
Global oldCallback,rowheight
Procedure liCB(hWnd, uMsg, wParam, lParam)
result = CallWindowProc_(oldCallback, hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_LBUTTONDOWN
pInfo.LVHITTESTINFO
pInfo\pt\x = lParam & $FFFF
pInfo\pt\y = lParam >> 16 & $FFFF
SendMessage_(hWnd, #LVM_SUBITEMHITTEST, 0, pInfo)
SetGadgetItemState(0, pInfo\iItem, #PB_ListIcon_Checked|#PB_ListIcon_Selected)
r.RECT
r\top = pInfo\iSubItem
r\left = #LVIR_BOUNDS
SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r)
HideWindow(0,0)
MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1)
Debug GetGadgetState(0)
Case #WM_VSCROLL,#WM_MOUSEWHEEL
HideWindow(0,1)
EndSelect
ProcedureReturn result
EndProcedure
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
If *NMHDR\hWndFrom = GetWindow_(GadgetID(0),#GW_CHILD)
*phdn.NMHEADER = lParam
If *phdn\iItem = 0
ProcedureReturn 1
EndIf
EndIf
Case #WM_NCACTIVATE
If wParam = 0
ProcedureReturn 1
EndIf
Case #WM_MOVE
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, GetGadgetState(0), r.rect)
If r\top > GadgetHeight(0)-30
r\top-GadgetHeight(0)-30
EndIf
MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1)
Case #WM_SIZE
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(10)-20,WindowHeight(10)-50 )
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Arial",12)
If OpenWindow(10, 0, 0, 640, 500, "Keep Selction", #PB_Window_Invisible| #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget)
ListIconGadget(0, 10, 10, 620, 450, "Column 0", 0,#PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0, 1, "Column 1" , 150)
AddGadgetColumn(0, 2, "Column 2" , 150)
AddGadgetColumn(0, 3, "Column 3" , 150)
For x = 0 To 100
AddGadgetItem(0, x,""+Chr(10)+ "Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x))
If Mod(x,2) = 0
SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$C9F5FD)
SetGadgetItemColor(0,x,#PB_Gadget_FrontColor,$242BFE,2)
Else
SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$EAFEF2)
EndIf
Next
SendMessage_(GadgetID(0), #LVM_GETITEMRECT, 0, r.RECT)
rowheight = r\bottom-r\top+2
OpenWindow(0,0,0,0,0,"",#PB_Window_BorderLess, WindowID(10))
SetWindowColor(0, GetSysColor_(#COLOR_HIGHLIGHT))
SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE, GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE)| #WS_EX_LAYERED)
SetLayeredWindowAttributes_(WindowID(0), GetSysColor_(#COLOR_HIGHLIGHT),10,#LWA_ALPHA)
oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB())
HideWindow(10,0)
SetActiveWindow(10)
SetWindowCallback(@WndProc())
EndIf
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0
EndSelect
EndSelect
Until Quit = 1
Egypt my love
Re: Disable Listicon Selection Color?
Thank you that works.RASHAD wrote: Wed Jun 30, 2021 8:26 pm Windows workaroundCode: Select all
Global oldCallback,rowheight Procedure liCB(hWnd, uMsg, wParam, lParam) result = CallWindowProc_(oldCallback, hWnd, uMsg, wParam, lParam) Select uMsg Case #WM_LBUTTONDOWN pInfo.LVHITTESTINFO pInfo\pt\x = lParam & $FFFF pInfo\pt\y = lParam >> 16 & $FFFF SendMessage_(hWnd, #LVM_SUBITEMHITTEST, 0, pInfo) SetGadgetItemState(0, pInfo\iItem, #PB_ListIcon_Checked|#PB_ListIcon_Selected) r.RECT r\top = pInfo\iSubItem r\left = #LVIR_BOUNDS SendMessage_(hWnd, #LVM_GETITEMRECT, pInfo\iItem, r) HideWindow(0,0) MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1) Debug GetGadgetState(0) Case #WM_VSCROLL,#WM_MOUSEWHEEL HideWindow(0,1) EndSelect ProcedureReturn result EndProcedure Procedure WndProc(hwnd, uMsg, wParam, lParam) result = #PB_ProcessPureBasicEvents Select uMsg Case #WM_NOTIFY *NMHDR.NMHDR = lParam If *NMHDR\hWndFrom = GetWindow_(GadgetID(0),#GW_CHILD) *phdn.NMHEADER = lParam If *phdn\iItem = 0 ProcedureReturn 1 EndIf EndIf Case #WM_NCACTIVATE If wParam = 0 ProcedureReturn 1 EndIf Case #WM_MOVE SendMessage_(GadgetID(0), #LVM_GETITEMRECT, GetGadgetState(0), r.rect) If r\top > GadgetHeight(0)-30 r\top-GadgetHeight(0)-30 EndIf MoveWindow_(WindowID(0),GadgetX(0, #PB_Gadget_ScreenCoordinate), GadgetY(0,#PB_Gadget_ScreenCoordinate) + r\top, GadgetWidth(0)-20,rowheight, 1) Case #WM_SIZE ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(10)-20,WindowHeight(10)-50 ) EndSelect ProcedureReturn result EndProcedure LoadFont(0,"Arial",12) If OpenWindow(10, 0, 0, 640, 500, "Keep Selction", #PB_Window_Invisible| #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget) ListIconGadget(0, 10, 10, 620, 450, "Column 0", 0,#PB_ListIcon_GridLines | #PB_ListIcon_AlwaysShowSelection) SetGadgetFont(0,FontID(0)) AddGadgetColumn(0, 1, "Column 1" , 150) AddGadgetColumn(0, 2, "Column 2" , 150) AddGadgetColumn(0, 3, "Column 3" , 150) For x = 0 To 100 AddGadgetItem(0, x,""+Chr(10)+ "Item "+Str(x)+Chr(10) + "Item "+Str(x)+Chr(10)+"Item "+Str(x)) If Mod(x,2) = 0 SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$C9F5FD) SetGadgetItemColor(0,x,#PB_Gadget_FrontColor,$242BFE,2) Else SetGadgetItemColor(0,x,#PB_Gadget_BackColor,$EAFEF2) EndIf Next SendMessage_(GadgetID(0), #LVM_GETITEMRECT, 0, r.RECT) rowheight = r\bottom-r\top+2 OpenWindow(0,0,0,0,0,"",#PB_Window_BorderLess, WindowID(10)) SetWindowColor(0, GetSysColor_(#COLOR_HIGHLIGHT)) SetWindowLongPtr_(WindowID(0),#GWL_EXSTYLE, GetWindowLongPtr_(WindowID(win),#GWL_EXSTYLE)| #WS_EX_LAYERED) SetLayeredWindowAttributes_(WindowID(0), GetSysColor_(#COLOR_HIGHLIGHT),10,#LWA_ALPHA) oldCallback = SetWindowLongPtr_(GadgetID(0), #GWL_WNDPROC, @liCB()) HideWindow(10,0) SetActiveWindow(10) SetWindowCallback(@WndProc()) EndIf Repeat Select WaitWindowEvent() Case #PB_Event_CloseWindow Quit = 1 Case #PB_Event_Gadget Select EventGadget() Case 0 EndSelect EndSelect Until Quit = 1


