The same code works on PureBaisc 6.00 LTS (x64) like a charm.
The Error occurs if the ListViewGadget is placed in a PanelGadget.
See the following code...
The Events "press a button" and "resize the window" are added to both ListViewGadgets.
But only the first one is displaying the items...
Code: Select all
EnableExplicit 
Enumeration EWindow 1	
#WINDOW_Main 
EndEnumeration 
Enumeration EGadget 1
#GADGET_lblInfo 
#GADGET_btnAdd 
#GADGET_lvOutput 
#GADGET_pnlMain
#GADGET_lvOutput2 
EndEnumeration 
; ---------------------------------------------------------------------------------------------------------------------
Procedure AddOutput(Message.s, State=#False) 
  Protected count, count2  
  AddGadgetItem(#GADGET_lvOutput, -1, Message) 
	count = CountGadgetItems(#GADGET_lvOutput) 
  SetGadgetItemData(#GADGET_lvOutput, count-1, State) 
  SetGadgetState(#GADGET_lvOutput, count-1) 
  AddGadgetItem(#GADGET_lvOutput2, -1, Message) 
	count2 = CountGadgetItems(#GADGET_lvOutput2) 
  SetGadgetItemData(#GADGET_lvOutput2, count2-1, State) 
  SetGadgetState(#GADGET_lvOutput2, count2-1) 
  
  SetGadgetText(#GADGET_lblInfo, "Counts = " + count + " | " + count2) 
EndProcedure
; ---------------------------------------------------------------------------------------------------------------------
Procedure OnCallback(hWnd, uMsg, wParam, lParam) 
	Protected *drawItem.DRAWITEMSTRUCT 
	Protected text.s, field.s, state  
	Protected textColor, brush  ; for background 
	Select uMsg 
		Case #WM_DRAWITEM
			*drawItem = lParam 
			If wParam = #GADGET_lvOutput Or wParam = #GADGET_lvOutput2 ; exact this listview 
				If *drawItem\itemID <> -1 
					text  = GetGadgetItemText(wParam, *drawItem\itemID) 
					state = GetGadgetItemData(wParam, *drawItem\itemID) 
					; make it look special 
					If *drawItem\itemState & #ODS_SELECTED                                         ;:Debug "DRAWITEM SELECTED " + Str(*drawItem\itemID ) 
            brush = CreateSolidBrush_(GetSysColor_(#COLOR_HIGHLIGHT))
            textColor = GetSysColor_(#COLOR_HIGHLIGHTTEXT) 
          Else                                                                        ;:Debug "DRAWITEM  ELSE    " + Str(*drawItem\itemID ) 
            brush = CreateSolidBrush_(GetSysColor_(#COLOR_WINDOW)) 
            textColor = GetSysColor_(#COLOR_WINDOWTEXT) 
          EndIf
          FillRect_(*drawItem\hdc, *drawItem\rcItem, brush) 
          DeleteObject_(brush)  ; no longer needed 
          SetTextColor_(*drawItem\hdc, textColor) 
					SetBkMode_(*drawItem\hdc, #TRANSPARENT)  
					; first column [30] is check mark for ... 
	 				If state 
		 				field = "✔" 
	 				Else 
		 				field = "✘" 
		 			EndIf 
	 				TextOut_(*drawItem\hdc, *drawItem\rcItem\left+2, *drawItem\rcItem\top, @field, Len(field)) 
					; second column [all] is entire item text 
					field = text 
					TextOut_(*drawItem\hdc, *drawItem\rcItem\left+32, *drawItem\rcItem\top, @field, Len(field)) 
					ProcedureReturn 0 
				EndIf 
			EndIf ; *drawitem\CtlType 
	EndSelect
 
	ProcedureReturn #PB_ProcessPureBasicEvents 
EndProcedure 
; ---------------------------------------------------------------------------------------------------------------------
Procedure OnSizeEvent() 
  AddOutput("Size Window Event ") 
EndProcedure
; ---------------------------------------------------------------------------------------------------------------------
Procedure CreateMainWindow(WndW = 800, WndH = 600)  
  If OpenWindow(#WINDOW_Main, 0, 0, WndW, WndH, "Tester", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_SizeGadget | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget) 
    ButtonGadget(#GADGET_btnAdd, 4, 4, 96, 24, "Add New Line") 
    TextGadget(#GADGET_lblInfo, 320, 4, WndW-124, 20, "Counts = 0 | 0 ") 
    ListViewGadget(#GADGET_lvOutput, 4, 32, 600, 200, #LBS_OWNERDRAWFIXED|#LBS_HASSTRINGS) 
		PanelGadget(#GADGET_pnlMain, 0, 240, 600, 220) 
			AddGadgetItem(#GADGET_pnlMain, -1, "Tab Sheet #1") 
  		  ListViewGadget(#GADGET_lvOutput2, 0, 0, 560, 200, #LBS_OWNERDRAWFIXED|#LBS_HASSTRINGS) 
				AddGadgetItem(#GADGET_pnlMain, -1, "Tab Sheet #2") 
	    	TextGadget(#PB_Any, 0, 0, 240, 20, "Empty Tab Sheet ") 
		CloseGadgetList() 
    BindEvent(#PB_Event_SizeWindow, @OnSizeEvent()) 
    SetWindowCallback(@OnCallback(), #WINDOW_Main) 
  EndIf 
  ProcedureReturn IsWindow(#WINDOW_Main) 
EndProcedure 
; ---------------------------------------------------------------------------------------------------------------------
Procedure main() 
  Protected state 
  If CreateMainWindow() 
    Repeat  ; main loop 
      Select WaitWindowEvent(250)  
        Case #PB_Event_None 
        Case #PB_Event_CloseWindow 
          If EventWindow() = #WINDOW_Main : Break : EndIf  ; close button on main window --> close application 
        Case #PB_Event_MoveWindow 
          AddOutput("Move Window") 
        Case #PB_Event_SizeWindow 
          AddOutput("Size Window") 
        Case #PB_Event_MinimizeWindow, #PB_Event_MaximizeWindow 
            AddOutput("Minimize or Maximize Window") 
        Case #PB_Event_Gadget 
          Select EventGadget()
            Case #GADGET_btnAdd 
	            AddOutput("Added a new Line to lvOutput ... ", 1) 
          EndSelect 
      EndSelect
    ForEver ; main loop 
  EndIf ; OpenWindow 
EndProcedure 
End main() 


