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()