More that one CheckBox in Row
Posted: Tue Sep 06, 2011 9:54 am
				
				How to make ListIconGadget with the more that one CheckBox in Row?
Like this:

			Like this:
http://www.purebasic.com
https://www.purebasic.fr/english/
Code: Select all
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7059&postdays=0&postorder=asc&start=15
; Author: Denis (updated for PB 4.00 by Andre)
; Date: 30. July 2003
; OS: Windows
; Demo: No
; ListIconGadget : adding icons to other columns than 1st
;constantes des Gadgets 
#MainWindow      = 0 
#ListIconGadget1 = 1 
#ButtonGadget    = 2 
#ButtonGadget2   = 3 
#ButtonGadget3   = 4 
#Font            = 5 
#FontHeader      = 6 
#LVM_SETEXTENDEDLISTVIEWSTYLE = 4150 
#LVS_EX_SUBITEMIMAGES         = 2 
;;======================================================================================== 
;;======================================================================================== 
If OpenWindow(#MainWindow,0,0,450,300, " Icon - Icon - Icon", #PB_Window_ScreenCentered |#PB_Window_SystemMenu) 
   Attention.l = CreateImage(300, 16,16)
   StartDrawing(ImageOutput(300))
     Box(4,4,8,8,RGB(255,30,30))
   StopDrawing()
    
   If CreateGadgetList(WindowID(#MainWindow)) And ListIconGadget(#ListIconGadget1,1,50,320,450,"Colonne 1", 298/3 ,#PB_ListIcon_MultiSelect|#PB_ListIcon_FullRowSelect) 
      AddGadgetColumn(#ListIconGadget1, 1, "Colonne 2",298/3) 
      AddGadgetColumn(#ListIconGadget1, 2, "Colonne 3",298/3) 
   EndIf 
   FontID = LoadFont(#Font, "ARIAL", 9) 
   SetGadgetFont(#ListIconGadget1, FontID) 
; set extended style to the listicongadget to set image for subitems 
   SendMessage_(GadgetID(#ListIconGadget1), #LVM_SETEXTENDEDLISTVIEWSTYLE , #LVS_EX_SUBITEMIMAGES, #LVS_EX_SUBITEMIMAGES) 
   For i.b = 0 To 5 
       AddGadgetItem(#ListIconGadget1, -1, "111"+Chr(10)+ "222"+Chr(10)+"333"+Chr(10)+ "444",Attention) 
   Next i 
; fill up var to set subitem icon and text 
   var.lv_item 
    
   Var\mask     = #LVIF_IMAGE | #LVIF_TEXT 
   Var\iItem    = 5  ; row number for change 
   Var\iSubItem = 2  ; 2nd subitem 
   Var\pszText  = @"Try"  ; text to change to 
   Var\iImage   = 1; index of icon in the list 
; set text + icon in the listicongadget 
   SendMessage_(GadgetID(#ListIconGadget1), #LVM_SETITEM, 0, @Var) 
EndIf 
  Repeat 
     Select WaitWindowEvent() 
  
         Case #PB_Event_CloseWindow 
         Quit = 1 
     EndSelect 
  Until Quit 
EndOn Windows that would be very difficult using the Microsoft ListView control (which is4RESTER wrote:How to make ListIconGadget with the more that one CheckBox in Row?
em_uk wrote:There may be an easier way to do this, but this will start you off with icons in other columns.
Code: Select all
; English forum: http://www.purebasic.fr/english/viewtopic.php?t=7059&postdays=0&postorder=asc&start=15 ; Author: Denis (updated for PB 4.00 by Andre) ; Date: 30. July 2003 ; OS: Windows ; Demo: No ; ListIconGadget : adding icons to other columns than 1st [/quote] That's not what I asked. I asked about the [u]standard[/u] CheckBoxes, not about Icones as CheckBoxes.
This also with the malfunctions when column resizing: http://www.purebasic.fr/english/viewtop ... 12&t=47455Shardik wrote:On Windows that would be very difficult using the Microsoft ListView control (which is4RESTER wrote:How to make ListIconGadget with the more that one CheckBox in Row?
the underlying basis of the ListIconGadget) even if using API functions. But RASHAD
has found a kind of "cheat" by using two ListIconGadgets appearing as a single one:
http://www.purebasic.fr/english/viewtop ... 12&t=47455
For Linux I posted an example in the German forum:
http://www.purebasic.fr/german/viewtopi ... 0&start=19

Code: Select all
Procedure WndProc(hwnd, uMsg, wParam, lParam)
result = #PB_ProcessPureBasicEvents 
Select uMsg
   
   Case #WM_NOTIFY,#WM_SETREDRAW
    *NMHDR.NMHDR = lParam  
      ; Fixed Column Width
       If IsGadget(1) And *NMHDR\hWndFrom = GetWindow_(GadgetID(1),#GW_CHILD) And *NMHDR\code = #HDN_FIRST
          *phdn.NMHEADER = lParam                  
              If *phdn\Iitem = 0
                    ProcedureReturn 1              
              EndIf   
       EndIf
         
       EndSelect
  ProcedureReturn result 
EndProcedure
  
  
  If OpenWindow(0, 0, 0, 640, 300, "ListIconGadgets", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
    ContainerGadget(0,10,25,620,260,#PB_Container_Flat)
    ListIconGadget(1,  0,  0, 140, 200, "Column 1", 139,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
    SetWindowLongPtr_(GadgetID(1),#GWL_EXSTYLE,0)
    SetGadgetColor(1,#PB_Gadget_BackColor,$EAFEFE)
    SetGadgetColor(1,#PB_Gadget_LineColor,$C5C5C5)
    ListIconGadget(2,  150,  0, 480, 200, "Column 2", 150,#PB_ListIcon_GridLines|#PB_ListIcon_CheckBoxes)
    SetWindowLongPtr_(GadgetID(2),#GWL_EXSTYLE,0)
    SetGadgetColor(2,#PB_Gadget_BackColor,$EAFEFE)
    SetGadgetColor(2,#PB_Gadget_LineColor,$C5C5C5)
      For i = 0 To 6
        AddGadgetItem(1, i, "Item 1")
      Next
      For i = 1 To 4
        AddGadgetColumn(2, i, "Column " + Str(i+2), 65)
      Next
      For i = 0 To 6
        AddGadgetItem(2, i, "Item 2"+Chr(10)+"Item 3"+Chr(10)+"Item 4"+Chr(10)+"Item 5"+Chr(10)+"Item 6")
      Next
      ResizeGadget(1,0,0,140,260)
      ResizeGadget(2,140,0,480,260)
      CloseGadgetList()
      
     SetWindowCallback(@WndProc())
    
    Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
  EndIf
If exist the MoreListIconGadget UserLib for the PureBasic 4.5x/4.6x then also can help (for free).Foz wrote:Perhaps esGrid or exGrid will be apt for you: http://www.purecoder.net/grids/screenshots.htm