Win-API-Lib: Problem ListIconGadget
Verfasst: 11.10.2015 09:53
Hallo,
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
Leider kann man damit nur Spalte 1 in der jeweils angeklickten Zeile editieren. Dazu habe ich an einigen Stellen mit *** Hinweise eingefügt. Das schließt auch die Bestimmung der Spaltenbreite von Spalte 0 ein.
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.)
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.)