I was lately a Corona victim so excuse me for any bugs I am not quite well
Usually column 0 in ListIcon has it's icon and case a lot of troubles
Next snippet no column 0 so *nmhdr\code = #HDN_ITEMCHANGING to prevent using the header to activate column 0
With taking KCC notifications into consideration
Code: Select all
Global oldCallback,ListIcon,LIColor,Oldr,Oldc,editflag
Procedure sizeCB()
ResizeGadget(0,10,10,WindowWidth(0)-20,WindowHeight(0)-60)
EndProcedure
Procedure LIcallback(hwnd, msg, wparam, lparam)
result = CallWindowProc_(oldCallback, hwnd, msg, wparam, lparam)
Select msg
Case #WM_NOTIFY
*NMHDR.NMHDR = lParam
If *nmhdr\code = #HDN_ITEMCHANGING; And *NMHDR\code = #HDN_FIRST
*phdn.NMHEADER = lParam
If *phdn\iItem = 0
ProcedureReturn 1
EndIf
r.RECT\top = Oldc
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
If editflag = 1
MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(2))
ElseIf Oldc = 4 And Run =0
Run = 1
MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
EndIf
EndIf
Case #WM_LBUTTONDOWN
SetGadgetState(0,-1)
MoveWindow_(GadgetID(2),0,0,0,0,1)
If editflag = 1 And GetGadgetText(2) <> ""
SetGadgetItemText(0, Oldr,GetGadgetText(2),Oldc)
EndIf
pInfo.LVHITTESTINFO
pInfo\pt\x = (lParam & $FFFF)
pInfo\pt\y = (lParam>> 16 & $FFFF)
SendMessage_(ListIcon,#LVM_SUBITEMHITTEST,0,@pInfo)
If pInfo\iSubItem = 4 And Run =0
Run = 1
r.RECT
r\top = pInfo\iSubItem
r\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, pInfo\iItem, r)
MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
Else
Run =0
MoveWindow_(GadgetID(5),0,0,0,0,1)
SetGadgetItemColor(0,OLdr,#PB_Gadget_FrontColor,#Black ,Oldc)
SetGadgetItemColor(0,Oldr, #PB_Gadget_BackColor, LIColor,Oldc)
SetGadgetItemColor(0,pInfo\iItem,#PB_Gadget_FrontColor,#White ,pInfo\iSubItem)
SetGadgetItemColor(0,pInfo\iItem, #PB_Gadget_BackColor,GetSysColor_(#COLOR_HIGHLIGHT),pInfo\iSubItem)
EndIf
editflag = 0
Oldr = pInfo\iItem
Oldc = pInfo\iSubItem
Case #WM_LBUTTONDBLCLK
editflag = 1
r.RECT\top = Oldc
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
SetGadgetText(2,"")
MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(2))
Case #WM_VSCROLL,#WM_HSCROLL
r.RECT\top = Oldc
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
If editflag = 1
MoveWindow_(GadgetID(2),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(2))
ElseIf Oldc = 4 And Run =0
Run = 1
MoveWindow_(GadgetID(5),r\left,r\top,r\right-r\left,r\bottom-r\top,1)
EndIf
InvalidateRect_(GadgetID(2),0,1)
EndSelect
ProcedureReturn result
EndProcedure
LoadFont(0,"Tahoma",10)
OpenWindow(0,0,0,640,480,"Test",#PB_Window_SystemMenu| #PB_Window_ScreenCentered| #PB_Window_SizeGadget)
ListIcon = ListIconGadget(0,10,10,620,460,"Column 0",0,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Column 1",200)
AddGadgetColumn(0,2,"Column 2",200)
AddGadgetColumn(0,3,"Column 3",200)
AddGadgetColumn(0,4,"Column 4",200)
AddGadgetColumn(0,5,"Column 5",100)
For i = 0 To 16
linestr.s = LSet(Str(i),3," ")
AddGadgetItem(0, -1, Chr(10)+"Text on Line "+linestr+" in Column 1"+Chr(10)+"Text on Line "+linestr+" in Column 2" + Chr(10)+"Text on Line "+linestr+" in Column 3" + Chr(10)+"")
Next
SetGadgetColor(0, #PB_Gadget_BackColor,$DFFEFD)
StringGadget(2,0,0,0,0,"",#ES_MULTILINE)
SendMessage_(GadgetID(2), #EM_SETMARGINS, #EC_LEFTMARGIN, 3)
SetParent_(GadgetID(2),GadgetID(0))
oldCallback = SetWindowLongPtr_(ListIcon, #GWL_WNDPROC, @LIcallback())
SetGadgetFont(0,FontID(0))
SetGadgetFont(2,FontID(0))
If GetGadgetColor(0, #PB_Gadget_BackColor) < 0
LIColor = #White
Else
LIColor = GetGadgetColor(0, #PB_Gadget_BackColor)
EndIf
ComboBoxGadget(5,0,0,0,0)
For a = 1 To 5
AddGadgetItem(5, -1,"ComboBox item " + Str(a))
Next
SetParent_(GadgetID(5),GadgetID(0))
BindEvent(#PB_Event_SizeWindow,@sizeCB())
Repeat
Select WaitWindowEvent()
Case #PB_Event_CloseWindow
Quit = 1
Case #WM_KEYDOWN
If GetActiveGadget() = 2 And EventwParam() = 27
MoveWindow_(GadgetID(2),0,0,0,0,1)
editflag = 0
ElseIf GetActiveGadget() = 2 And EventwParam() = 13
SetGadgetItemText(0, Oldr,GetGadgetText(2),Oldc)
MoveWindow_(GadgetID(2),0,0,0,0,1)
editflag = 0
EndIf
Case #PB_Event_Menu
Select EventMenu()
Case 1
EndSelect
Case #PB_Event_Gadget
Select EventGadget()
Case 5
MoveWindow_(GadgetID(5),0,0,0,0,1)
SetGadgetItemText(0, Oldr,GetGadgetText(5),Oldc)
EndSelect
EndSelect
Until Quit = 1
End