I have also remove the select case, because it's limited to 3 column.
But my new problem, is that, when i click on a empty cell, the selection is big because the variable "hitinfo\iItem" is again at -1
Code: Select all
#LVM_SUBITEMHITTEST = #LVM_FIRST + 57
Global oldlist,lv
Procedure.s GetNewText(item,subitem,xpos)
OpenWindow(1, xpos + 150,DesktopMouseY()+10,260,20,"",#PB_Window_BorderLess)
GetWindowRect_(WindowID(1), editrect.rect)
ClipCursor_(editrect)
CreateGadgetList(WindowID(1))
StringGadget(1,0,0,190,20,"")
ButtonGadget(2,190,0,30,20,"OK")
ButtonGadget(3,220,0,40,20,"Cancel")
SetActiveGadget(1)
AddKeyboardShortcut(1,#PB_Shortcut_Return,1)
SetGadgetItemColor(0,item,#PB_Gadget_BackColor,RGB(200,200,200),subitem)
quit=0
Repeat
ev=WaitWindowEvent()
If EventWindow()=1
Select ev
Case #PB_Event_Menu
If EventMenu()=1
SetGadgetItemText(0,item,GetGadgetText(1),SubItem)
CloseWindow(1)
quit = 1
EndIf
Case #PB_Event_Gadget
If EventGadget()=2
SetGadgetItemText(0,item,GetGadgetText(1),SubItem)
CloseWindow(1)
quit = 1
ElseIf EventGadget() = 3
CloseWindow(1)
quit = 1
EndIf
EndSelect
EndIf
Until quit
SetGadgetItemColor(0,item,#PB_Gadget_BackColor,#White,subitem)
ClipCursor_(0)
EndProcedure
Procedure SubClass_LV(hwnd, msg, wparam, lparam)
Result = CallWindowProc_(oldlist, hwnd, msg, wparam, lparam)
If Msg = #WM_RBUTTONDOWN
HitInfo.LVHITTESTINFO
Hitinfo\pt\x = lparam & $ffff
HitInfo\pt\y = lparam >> 16&$ffff
SendMessage_(lv, #LVM_SUBITEMHITTEST, 0, @HitInfo)
GetNewText(hitinfo\iItem, hitinfo\iSubItem, Hitinfo\pt\x)
EndIf
ProcedureReturn result
EndProcedure
OpenWindow(0,0,0,640,480,"ListIcon Gadget Mischief: Edit Selected Item",$CF0001)
CreateGadgetList(WindowID(0))
lv = ListIconGadget(0,0,100,640,280,"",0,#PB_ListIcon_GridLines)
AddGadgetColumn(0,1,"Column 1",210)
AddGadgetColumn(0,2,"Column 2",210)
AddGadgetColumn(0,3,"Column 3",215)
For i = 1 To 12
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")
Next
oldlist=SetWindowLong_(lv, #GWL_WNDPROC, @SubClass_LV())
Repeat
ev = WaitWindowEvent()
Until ev=#WM_CLOSE