Page 1 of 1

Special ListIconGadget() [Windows]

Posted: Wed Apr 01, 2015 7:29 pm
by RASHAD
- Very flexible
- 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
Edit :Very quick fix
Edit2 :some lines removed

Re: Special ListIconGadget() [Windows]

Posted: Wed Apr 01, 2015 10:59 pm
by Thunder93
Very impressively done-up RASHAD! ... I bet you've guessed that I'll be among the first to respond. :wink: :lol:

The only dislike I have, is the column images dis-alignments to the header images. :wink:

Image

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:41 am
by RASHAD
You can shift the columns icons to the left by 6 pix

# 1:
From the beginning :
- Create image 26x20
- draw columns icons at 6,0
- draw the header icons at 0,0

# 2:
Use ImageList_Merge_()

# 3:
Use my stupid fix :mrgreen:

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:48 am
by Thunder93
LOL!

That works. :twisted:


Thanks. :lol:

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:53 am
by RASHAD
Hi Thunder93
I just changed it again :)

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:56 am
by Thunder93
Looking better and better.! Is it me or does it look like the alignments are off by fraction of a hair ?? :twisted:

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 1:00 am
by RASHAD
I do not know :D
You can play with [ 6 ] up or down

Code: Select all

ImageList_Draw_(ILwnd,index,hdc,6,0,#ILD_TRANSPARENT)

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 1:02 am
by Thunder93
:lol:


... Just teasing you. 8)

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 2:47 am
by Thunder93
Hi RASHAD.

Quick question. Lines 132, 133, 134 consisting of ImageList_AddIcon_() .. are just unnecessary duplicates or they serve a special purpose that I'm yet to see why?

Sometime I have the chance, going to see if I can put some of that stuff into procedures for little more convince and flexibility and make it little smaller if possible.

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 2:54 am
by RASHAD
Yes you are right
No need for the 3 lines
Code updated

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 3:03 am
by Thunder93
I knew you like playing mind games.... I'm going to have to keep an watchful eye on you. :shock:

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 4:40 am
by Thunder93
Here's your code after it has been touched by the hand of GOD.

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

Structure Shells : Num.i : EndStructure : Global Dim Icwnd.Shells(6)

Procedure _SetHeaderColumn_Images()
  Global ILwnd, ILwnd2, iinf.ICONINFO
  
  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\fIcon = 1
  
  For i = 0 To 6
    iinf\hbmMask = ImageID(i)
    iinf\hbmColor = ImageID(i)    
    Icwnd(i)\Num = CreateIconIndirect_(iinf)
  Next
  
  For Img = 0 To 6
    FreeImage(Img)
  Next
  
  ILwnd = ImageList_Create_(20,  20,  #ILC_COLOR32| #ILC_MASK,  0,  100)
  ILwnd2 = ImageList_Create_(26,  20,  #ILC_COLOR32| #ILC_MASK,  0,  100)  
  
  For i = 0 To 6
    ImageList_AddIcon_(ILwnd,  Icwnd(i)\Num)
  Next
  
  If ILwnd And ILwnd2
    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)  
    ProcedureReturn 1
  EndIf  
EndProcedure

If _SetHeaderColumn_Images() = 0 : MessageRequester("Special ListIcon", "Error Code: 4021. Terminating RASHAD's failed code.", #PB_MessageRequester_Ok) : EndIf


LoadFont(0,  "Broadway",  16)

If 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
  ImageList_Destroy_(ILwnd2)
  
EndIf
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

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:18 pm
by RASHAD
Nooooo :mrgreen:
Next the code after the original GOD got some rest
You can use any symbol you like(draw it yourself)

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

LoadFont(0,"Marlett",120)
iinf.ICONINFO
iinf\fIcon = 1

ILwnd = ImageList_Create_(26,20,#ILC_COLOR32| #ILC_MASK, 0, 100)

CreateImage(0,26,20,24,#White)
iinf\hbmMask = ImageID(0)
iinf\hbmColor = ImageID(0)
Icwnd = CreateIconIndirect_(iinf)
ImageList_AddIcon_(ILwnd,Icwnd)

For img = 0 To 1
  CreateImage(0,260,200,24,#White)
  StartDrawing(ImageOutput(0))
  Box(60,0,160,160,0)
  Box(80,20,120,120,$FFFFFF)
  If img = 1
    DrawingFont(FontID(0))
    DrawingMode(#PB_2DDrawing_Transparent)
    DrawText(70,0,Chr($61),0)
  EndIf
  StopDrawing()
  ResizeImage(0,26,20,#PB_Image_Smooth)
  iinf\hbmMask = ImageID(0)
  iinf\hbmColor = ImageID(0)
  Icwnd = CreateIconIndirect_(iinf)
  ImageList_AddIcon_(ILwnd,Icwnd)
Next

FreeFont(0)

For img = 0 To 3
  CreateImage(0,260,200,24,#White)
  StartDrawing(ImageOutput(0))
  Circle(160,90,90,$89898A)
    If img = 0 Or img = 2
      Circle(160,90,70,$00FF00)
    Else
      Circle(160,90,70,$0000FF)
    EndIf
    If img > 1
      Circle(160,90,40,$FFFFFF)
    EndIf
  StopDrawing()
  ResizeImage(0,26,20,#PB_Image_Smooth)
  iinf\hbmMask = ImageID(0)
  iinf\hbmColor = ImageID(0)
  Icwnd = CreateIconIndirect_(iinf)
  ImageList_AddIcon_(ILwnd,Icwnd)
Next

CreateImage(0,260,200,24,#White)
StartDrawing(ImageOutput(0))
  Box(0,20,160,160,0)
  Box(20,40,120,120,$FFFFFF)
StopDrawing()
ResizeImage(0,26,20,#PB_Image_Smooth)
iinf\hbmMask = ImageID(0)
iinf\hbmColor = ImageID(0)
Icwnd = CreateIconIndirect_(iinf)
ImageList_AddIcon_(ILwnd,Icwnd)
  
For img = 0 To 1
  CreateImage(0,260,200,24,#White)
  StartDrawing(ImageOutput(0))
  Circle(100,100,90,$89898A)
  Circle(100,100,70,$00FF00)
  If img = 1
    Circle(100,100,40,$FFFFFF)
  EndIf
  StopDrawing()
  ResizeImage(0,26,20,#PB_Image_Smooth)
  iinf\hbmMask = ImageID(0)
  iinf\hbmColor = ImageID(0)
  Icwnd = CreateIconIndirect_(iinf)
  ImageList_AddIcon_(ILwnd,Icwnd)
Next

FreeImage(0)

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, ILwnd)

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
Edit : updated for smoothing
Edit2 :Bug fixed

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:44 pm
by Thunder93
Eh. you needed sleep? ;p

No cheating allowed. You are removing options / features. You suppose to try to make smaller and remove redundant code while maintaining same features. ..I told you that I was going to keep an watchful-eye on you. :shock:

Re: Special ListIconGadget() [Windows]

Posted: Thu Apr 02, 2015 12:54 pm
by RASHAD
You are wrong :mrgreen:
I should make it as much flexible as I can and Less Executable :P
Previous post updated for smoothing :lol: