Special ListIconGadget() [Windows]
Posted: Wed Apr 01, 2015 7:29 pm
- Very flexible
- Adapt it for your needs
- Left Click to switch icons
Have fun
RASHAD
Edit :Very quick fix
Edit2 :some lines removed
- Adapt it for your needs
- Left Click to switch icons
Have fun
RASHAD
Code: Select all
#HDF_IMAGE = $800
#HDI_IMAGE = $20
UsePNGImageDecoder()
Global oldproc, header_h ,Header,cell.LVHITTESTINFO,ii.lv_item
Procedure SetImg(Row,Col,Img)
ii\mask = #LVIF_IMAGE
ii\iItem = Row
ii\iSubItem = Col
ii\iImage = Img
SendMessage_(GadgetID(0), #LVM_SETITEM, 0, @ii)
EndProcedure
Procedure GetImg(Row,Col)
ii\mask = #LVIF_IMAGE
ii\iItem = Row
ii\iSubItem = Col
SendMessage_(GadgetID(0), #LVM_GETITEM, 0, @ii)
EndProcedure
Procedure HeaderImg(Col,Img)
hi.HDITEM
hi\mask = #HDI_IMAGE
hi\fmt = #HDF_IMAGE
hi\iImage = Img
SendMessage_(Header , #HDM_SETITEM, Col, @hi)
EndProcedure
Procedure Hheight(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #HDM_LAYOUT
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
*hdlayout.HD_LAYOUT = lParam
If *hdlayout\prc <> 0
*rect.RECT = *hdlayout\prc
*rect\top = header_h
EndIf
If *hdlayout\pwpos <> 0
*windowpos.WINDOWPOS = *hdlayout\pwpos
*windowpos\cy = header_h
EndIf
Default
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
EndSelect
ProcedureReturn result
EndProcedure
Procedure WinCallback(hWnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents
Select uMsg
Case #WM_SIZE
ResizeGadget(0,#PB_Ignore,#PB_Ignore,WindowWidth(0)-20,WindowHeight(0)-60)
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
If *NMHDR\hWndFrom = GetWindow_(GadgetID(0),#GW_CHILD) And *NMHDR\code = #HDN_FIRST
*phdn.NMHEADER = lParam
row = *phdn\iItem
If row = 0 Or row = 1 Or row = 2 Or row = 3
ProcedureReturn 1
EndIf
EndIf
EndSelect
ProcedureReturn result
EndProcedure
CreateImage(0,26,20,24,#White)
CatchImage(1,?CBox0)
CatchImage(2,?CBox1)
CatchImage(3,?Circle0)
CatchImage(4,?Circle1)
CatchImage(5,?Ocircle0)
CatchImage(6,?Ocircle1)
iinf.ICONINFO
iinf\fIcon = 1
iinf\hbmMask = ImageID(0)
iinf\hbmColor = ImageID(0)
Icwnd0 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(1)
iinf\hbmColor = ImageID(1)
Icwnd1 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(2)
iinf\hbmColor = ImageID(2)
Icwnd2 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(3)
iinf\hbmColor = ImageID(3)
Icwnd3 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(4)
iinf\hbmColor = ImageID(4)
Icwnd4 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(5)
iinf\hbmColor = ImageID(5)
Icwnd5 = CreateIconIndirect_(iinf)
iinf\hbmMask = ImageID(6)
iinf\hbmColor = ImageID(6)
Icwnd6 = CreateIconIndirect_(iinf)
For img = 0 To 6
FreeImage(img)
Next
ILwnd2 = ImageList_Create_(26,20,#ILC_COLOR32| #ILC_MASK, 0, 100)
ILwnd = ImageList_Create_(20,20,#ILC_COLOR32| #ILC_MASK, 0, 100)
ImageList_AddIcon_(ILwnd,Icwnd0)
ImageList_AddIcon_(ILwnd,Icwnd1)
ImageList_AddIcon_(ILwnd,Icwnd2)
ImageList_AddIcon_(ILwnd,Icwnd3)
ImageList_AddIcon_(ILwnd,Icwnd4)
ImageList_AddIcon_(ILwnd,Icwnd5)
ImageList_AddIcon_(ILwnd,Icwnd6)
; ImageList_AddIcon_(ILwnd,Icwnd1)
; ImageList_AddIcon_(ILwnd,Icwnd3)
; ImageList_AddIcon_(ILwnd,Icwnd5)
For index = 0 To 6
CreateImage(0,26,20,24,$FFFFFF)
hdc = StartDrawing(ImageOutput(0))
ImageList_Draw_(ILwnd,index,hdc,6,0,#ILD_TRANSPARENT)
StopDrawing()
iinf\hbmMask = ImageID(0)
iinf\hbmColor = ImageID(0)
Icwnd = CreateIconIndirect_(iinf)
ImageList_AddIcon_(ILwnd2,Icwnd)
Next
For index = 1 To 5 Step 2
CreateImage(0,26,20,24,#White)
hdc = StartDrawing(ImageOutput(0))
ImageList_Draw_(ILwnd,index,hdc,0,0,#ILD_TRANSPARENT)
StopDrawing()
iinf\hbmMask = ImageID(0)
iinf\hbmColor = ImageID(0)
Icwnd = CreateIconIndirect_(iinf)
ImageList_AddIcon_(ILwnd2,Icwnd)
Next
ImageList_Destroy_(ILwnd)
LoadFont(0,"Broadway",16)
OpenWindow(0,0,0,800,600, "Special ListIcon", #PB_Window_ScreenCentered |#PB_Window_SystemMenu | #PB_Window_MaximizeGadget| #PB_Window_SizeGadget)
ListIconGadget(0,10,10,780,540,"",0,#PB_ListIcon_GridLines)
SetGadgetColor(0,#PB_Gadget_BackColor,$E6E6E6)
SetGadgetColor(0,#PB_Gadget_LineColor,$FEC0C2)
Header = SendMessage_(GadgetID(0), #LVM_GETHEADER, 0, 0)
SetGadgetFont(0,FontID(0))
AddGadgetColumn(0, 1, "",32)
AddGadgetColumn(0, 2, "",32)
AddGadgetColumn(0, 3, "",32)
AddGadgetColumn(0, 4, "Column 1",200)
AddGadgetColumn(0, 5, "Column 2",200)
AddGadgetColumn(0, 6, "Column 3",200)
SendMessage_(GadgetID(0), #LVM_SETEXTENDEDLISTVIEWSTYLE , #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES)
SendMessage_(GadgetID(0), #LVM_SETIMAGELIST, #LVSIL_SMALL, ILwnd2)
For i = 0 To 5
AddGadgetItem(0, -1, Chr(10)+Chr(10)+Chr(10)+Chr(10)+" 111"+Chr(10)+" 222"+Chr(10)+ " 333",0)
Next
oldproc = SetWindowLongPtr_(Header, #GWL_WNDPROC, @Hheight())
header_h = 42
For cel = 0 To 5
SetImg(cel,1,1)
Next
SetImg(0,2,3)
SetImg(0,3,1)
SetImg(0,2,4)
SetImg(1,2,3)
SetImg(0,3,5)
SetImg(1,3,6)
HeaderImg(1,7)
HeaderImg(2,8)
HeaderImg(3,9)
SetWindowCallback(@WinCallback())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #PB_Event_Gadget
Select EventGadget()
Case 0
Select EventType()
Case #PB_EventType_LeftClick
GetCursorPos_(@p.POINT)
ScreenToClient_(GadgetID(0), p)
cell\pt\x = p\x
cell\pt\y = p\y
SendMessage_(GadgetID(0),#LVM_SUBITEMHITTEST,0,@cell)
LI_row = cell\iItem
LI_col = cell\iSubItem
GetImg(LI_row,LI_col)
index = ii\iImage
If index > 0 And index <= 6
If index % 2 = 1
SetImg(LI_row,LI_col,index + 1)
Else
SetImg(LI_row,LI_col,index - 1)
EndIf
EndIf
EndSelect
EndSelect
EndSelect
Until Quit = 1
End
DataSection
CBox0:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$41444969000000AF
Data.q $C00A3194EDCB3854,$8ABC45FFBD450830,$2C7FB6B8ABD1762E,$F57F250870534934,$85A1459D280847FD
Data.q $A30074C7AAA99945,$0D2A0C7D088910D2,$7E3111CCC6619991,$DC8AE9518060000B,$B3EE88BD8047E67D
Data.q $A2D2D16D16F09E41,$5233B2DA582915B2,$642B2FFC777ED876,$00004C0F8C5D0CC2,$42AE444E45490000
Data.q $8260
CBox0end:
CBox1:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$414449DE000000AF
Data.q $840E3194DDCB3854,$F195833D2D451020,$2CED057A4385DE04,$1BD42CA9044D90B5,$1B36491FDDDB1210
Data.q $FE03BFB362958541,$A29033D1330CC0BC,$C3EDB6DAEBAD061F,$269A6A02C4233059,$CE294A202C4214F2
Data.q $302EFCE18618A28A,$739C410E423306C0,$B33CFA0176C08C97,$77F7DF4B2CB5294A,$05B884275D74F041
Data.q $9084415C9B1639D2,$798C620D638E251D,$40A4C4924D34D280,$639E79415CB04A52,$5B3CF35A45FBDC09
Data.q $81FCCCB2CA0870F3,$19476AAAAA07E29A,$EBAB556732A4F1C7,$4B2CA82037CBBCDA,$2835E0ABB4D34E6C
Data.q $6BF06E8B4D988B58,$BBFB60D8246360DA,$AF9F53C5E202FFE1,$4900000000EE3873,$826042AE444E45
CBox1end:
Circle0:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$414449CD000000AF
Data.q $440E31D4D5CB3854,$B5431C29E1861840,$8434E1CF635051D7,$8485615C24E34742,$C8AEC913FDDE4833
Data.q $3CCD0AF959A233B0,$FEA3D3715FBE6331,$A157177C7D999A07,$E1E41D99198484D6,$460C0CE0E2EFD67D
Data.q $3203FA4A4DB111D0,$8EC9D0873434D651,$A564C4D0345859B4,$42D810140D121248,$E6D3FDB6FBFCB36A
Data.q $4E49141743DAF179,$545503DE52540F7E,$47A5B0E7BA22287B,$8F4A42FE8783CAB6,$E68C8D0F5696A0AC
Data.q $B68DA4D759E793CA,$895CF1B4BF6C3A9B,$A47A51B491E74D89,$E9EDA8CAEE8E90FD,$0DBFF53575B90A0B
Data.q $4D6B99AB49EE37FF,$454900000000B337,$826042AE444E
Circle0end:
Circle1:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$414449C3000000AF
Data.q $440E4BD4D5CB3854,$9586385AE0061040,$10D38738F6B058EB,$12102B849C6C7616,$4646499929A920CE
Data.q $5F5BFC86F4974F75,$041E0FA5A017F5FA,$7C022EBA01061B6D,$BFF7C84214584512,$20CD9E7071C4FFFF
Data.q $944C83FF9E4E7115,$66C476690D4EBA77,$CB250A655D6839DF,$9D070010C50C2838,$286E8178E33CDA6F
Data.q $A825B5D504B4B294,$EA6C3A5B1C502E69,$1EA483C53CF15491,$5022CB4057BEA089,$5370A36A35DB54D2
Data.q $18924AF51B53F6EA,$C85D88F5236A23CF,$755584D3B51ADC30,$017FF0DA7DB6BABC,$98C3C28C99AB4AF5
Data.q $444E454900000000,$826042AE
Circle1end:
Ocircle0:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$4144492C010000AF
Data.q $41AE4B94D5CB3854,$2C8C32C48F861041,$26C0D7B18250D4C3,$C240633030856C4C,$F100B2308205B036
Data.q $EDDD69D2A6EA4ADD,$F3FFA746A744C7DC,$2B4FF195FD575775,$8946835B8DD01CFB,$FC6635A2D1A64652
Data.q $9145EFFD9A8D5033,$C6E10C502E5389E2,$DF53AEAB901BD188,$EE86432E17EFD1B0,$2815196414558AEE
Data.q $C62A15EE775D3A78,$A7635CAE8008F07A,$69350010603D6EC5,$2B1AD96F4AE9465A,$9AE8E759AF4AB200
Data.q $243D7A0F8381D06F,$27F2613C55F4FAB1,$20A2CC678A9E8F50,$B99CC3BD905BF4A9,$3497E93DD6D36A0F
Data.q $DB23E2D8F533C9E5,$565554AA80497E96,$A42A91F1486E1CA6,$C76F3B4B259462EB,$EAE04D76733A0C2E
Data.q $CA6E97448BBB2334,$F969529FCF46E26B,$8BF751525E279DC7,$8F3BC9D0EFD6D23F,$645C8457A3E28DC4
Data.q $CA71C8F6A337FECF,$FF86D3E2C16EBA54,$2ABBDFF698AAC717,$4E454900000000C5,$826042AE44
Ocircle0end:
Ocircle1:
Data.q $0A1A0A0D474E5089,$524448490D000000,$1800000018000000,$AA156F0000000208,$41444921010000AF
Data.q $820E3B94D5CB3854,$1E5618E131861040,$B82C51AC449296C3,$85876160C1578D84,$5025120AE00D7024
Data.q $D79775C638E20071,$7C3B1533FC68F8AC,$2923F028FF3BB3BB,$8F180C300A2A047F,$6FB76C2698585141
Data.q $85550ADFFC5D7482,$71C3D442881879F3,$218419B3D9EA815E,$7D5634D9B0659EFB,$1E56A3468AF1069F
Data.q $D555582A74C25953,$EBD4F2376A73CA07,$15C915173E681F75,$041D2FE203D58245,$A03A9D3A09E6DA03
Data.q $DD764B36D93226CE,$69EFDE4B15AB40EF,$BCF07BF14BF4BE10,$722FD86B60B1680E,$65F11F46CBD2AF5D
Data.q $264DA58D348917EC,$75D8191E8FA24344,$A0131C5FB1478E94,$88AB1E5A8261A5CB,$37435EA4B2C3059F
Data.q $E7D4FF8D2F89FCB6,$B90FE8FDDA28B349,$88DD08F3C1CB97F5,$D1F24920F022EA3E,$775DEEEDD8534DA8
Data.q $045801BFF0DBFC38,$00003DFA0EDEF698,$42AE444E45490000,$8260
Ocircle1end:
EndDataSection
Edit2 :some lines removed