- Double click for edit
- Click Column 4 for ComboBoxGadget()
Code: Select all
Global oldCallback,ListIcon,LIColor,Oldr,Oldc,editflag
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 editflag = 1
r.RECT\top = Oldc
r.RECT\left = #LVIR_BOUNDS
SendMessage_(GadgetID(0), #LVM_GETSUBITEMRECT, Oldr, r)
If Oldc = 0
r\right = r\left+SendMessage_(GadgetID(0), #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
MoveWindow_(GadgetID(2),r\left+GadgetX(0)+2,r\top+GadgetY(0)+2,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(2))
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
SendMessage_(GadgetID(0),#WM_HSCROLL,#SB_PAGERIGHT,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+GadgetX(0)+2,r\top+GadgetY(0)+2,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)
SendMessage_(GadgetID(0), #LVM_GETHOTITEM, 0,0)
If Oldc = 0
r\right = r\left+SendMessage_(GadgetID(0), #LVM_GETCOLUMNWIDTH, 0, 0)
EndIf
SetGadgetText(2,"")
MoveWindow_(GadgetID(2),r\left+GadgetX(0)+2,r\top+GadgetY(0)+2,r\right-r\left,r\bottom-r\top,1)
SetFocus_(GadgetID(2))
Case #WM_VSCROLL,#WM_HSCROLL
MoveWindow_(GadgetID(2),0,0,0,0,1)
MoveWindow_(GadgetID(5),0,0,0,0,1)
SetGadgetItemColor(0,OLdr,#PB_Gadget_FrontColor,#Black ,Oldc)
SetGadgetItemColor(0,Oldr, #PB_Gadget_BackColor, LIColor,Oldc)
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,450,"Column 0",200,#PB_ListIcon_GridLines|#WS_CLIPSIBLINGS );|#LVS_EDITLABELS)
AddGadgetColumn(0,1,"Column 1",210)
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, "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)+"Text on Line "+linestr+" in Column 3"+ Chr(10)+"")
Next
SetGadgetColor(0, #PB_Gadget_BackColor,$DFFEFD)
ButtonGadget(1,10,450,150,24,"Add new ROW")
StringGadget(2,0,0,0,0,"",#ES_MULTILINE|#WS_CLIPSIBLINGS);|#PB_String_BorderLess)
SendMessage_(GadgetID(2), #EM_SETMARGINS, #EC_LEFTMARGIN, 3)
BringWindowToTop_(GadgetID(2))
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,#WS_CLIPSIBLINGS)
For a = 1 To 5
AddGadgetItem(5, -1,"ComboBox item " + Str(a))
Next
BringWindowToTop_(GadgetID(5))
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 1
linestr.s = LSet(Str(CountGadgetItems(0)),3," ")
AddGadgetItem(0, -1, "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)+"Text on Line "+linestr+" in Column 3"+ Chr(10)+"")
Case 5
MoveWindow_(GadgetID(5),0,0,0,0,1)
SetGadgetItemText(0, Oldr,GetGadgetText(5),Oldc)
EndSelect
Case #WM_SIZE
ResizeGadget(0,10,10,WindowWidth(0)-20,WindowHeight(0)-60)
EndSelect
Until Quit = 1
End
Edit : Added support for Return and Esc
Edit 2 : Some bugs fixed
Edit 3 : More bugs fixed
Edit 4 : More bugs fixed