in der Win-Api-Library gibt es für das ListIconGadget ein an sich sehr schönes Beispiel für das Bearbeiten eines Items:
http://www.rsbasic.de/aktualisierung/wi ... rbeiten.pb
Code: Alles auswählen
;Autor: Fluid Byte
EnableExplicit
Define EventID
Define a
Global lpPrevFunc
#Gadget_LIG = 1
Procedure EditLabelProc(hWnd, uMsg, wParam, lParam)
Select uMsg
Case #WM_WINDOWPOSCHANGING
Protected *lpwp.WINDOWPOS = lParam
;Nun wird die Breite der Spalte 0 ermittelt **********************
*lpwp\x = GetGadgetItemAttribute(#Gadget_LIG, 0, #PB_ListIcon_ColumnWidth) + 4
ProcedureReturn 0
EndSelect
ProcedureReturn CallWindowProc_(lpPrevFunc, hWnd, uMsg, wParam, lParam)
EndProcedure
Procedure WindowCallback(hWnd, uMsg, wParam, lParam)
Protected *nmh.NMHDR
Protected *nmpdi.NMLVDISPINFO
Select uMsg
Case #WM_NOTIFY
*nmh.NMHDR = lParam
If *nmh\hwndFrom = GadgetID(#Gadget_LIG)
Select *nmh\code
Case #LVN_BEGINLABELEDIT
Protected hwndLVEdit = SendMessage_(*nmh\hwndFrom, #LVM_GETEDITCONTROL, 0, 0)
;die folgende Spalte gilt leider nur für Spalte 1 **********************
Protected Result$ = GetGadgetItemText(#Gadget_LIG, GetGadgetState(#Gadget_LIG), 1)
SendMessage_(hwndLVEdit, #WM_SETTEXT, 0, @Result$)
lpPrevFunc = SetWindowLong_(hwndLVEdit, #GWL_WNDPROC, @EditLabelProc())
ProcedureReturn 0
Case #LVN_ENDLABELEDIT
*nmpdi.NMLVDISPINFO = lParam
If *nmpdi\item\pszText ; die folgende Zeile leider nur für Spalte 1 *************
SetGadgetItemText(#Gadget_LIG, GetGadgetState(#Gadget_LIG), PeekS(*nmpdi\item\pszText), 1)
EndIf
ProcedureReturn 0
EndSelect
EndIf
ProcedureReturn 0
EndSelect
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#Gadget_LIG, 0, 0, WindowWidth(0), WindowHeight(0), "Spalte 1", 150, #PB_ListIcon_FullRowSelect | #PB_ListIcon_GridLines | #LVS_EDITLABELS)
AddGadgetColumn(#Gadget_LIG, 1, "Spalte 2", 150)
AddGadgetColumn(#Gadget_LIG, 2, "Spalte 3", 150)
For a=1 To 10
AddGadgetItem(#Gadget_LIG, -1, "Item " + Str(a) + ", 1" + Chr(10) + "Item " + Str(a) + ", 2" + Chr(10) + "Item " + Str(a) + ", 3", 0, 0)
Next
SetWindowCallback(@WindowCallback())
Repeat
EventID = WaitWindowEvent()
If EventID = #PB_Event_CloseWindow
End
EndIf
ForEver
EndIf
Es wäre schön, wenn man das Ganze so erweitern könnte, dass die jeweils angeklickte Zeile und Spalte editiert werden könnte. (Leider verstehe ich viel zu wenig von den API-Funktionen.)