Den Code habe ich schon eine ganze Weile herumzuliegen. Vielleicht kann jemand was mit anfangen.
Hinweis: Die erste Spalte im LIG ist ausgeblendet. Änderungen werden übernommen sobald der Mauszeiger aus der Zelle bewegt wird.
Code: Alles auswählen
Enumeration
#Win
EndEnumeration
Enumeration
#Lig
#Stg
EndEnumeration
Global Zeile, Spalte, oldproc
#LVM_SUBITEMHITTEST = #LVM_FIRST + 57
#LVM_GETSUBITEMRECT = #LVM_FIRST + 56
Procedure LigAusrichtGet() ;sibru
Protected Ausricht.LV_COLUMN\mask = #LVCF_FMT
If SendMessage_(GadgetID(#Lig), #LVM_GETCOLUMN, Spalte, @Ausricht) = 0
Ausricht\fmt = #LVS_NOCOLUMNHEADER - 1 ;Error
EndIf
If Ausricht\fmt - #LVS_NOCOLUMNHEADER = 0 : Adj = #ES_LEFT
ElseIf Ausricht\fmt - #LVS_NOCOLUMNHEADER = 1 : Adj = #ES_RIGHT
ElseIf Ausricht\fmt - #LVS_NOCOLUMNHEADER = 2 : Adj = #ES_CENTER
Else
Adj = #ES_LEFT
EndIf
ProcedureReturn Adj
EndProcedure
Procedure SubClass_LV(hWnd, uMsg, wParam, lParam) ;netmaestro
result = CallWindowProc_(oldproc, hWnd, uMsg, wParam, lParam)
If uMsg = #WM_LBUTTONDOWN
GetCursorPos_(@cp.POINT)
MapWindowPoints_(0, hWnd, @cp, 1)
hitinfo.LVHITTESTINFO
hitinfo\pt\x = cp\x
hitinfo\pt\y = cp\y
SendMessage_(hWnd, #LVM_SUBITEMHITTEST, 0, @hitinfo)
If hitinfo\iSubItem > 0 And hitinfo\iItem >= 0
Zeile = hitinfo\iItem
Spalte = hitinfo\iSubItem
RtlZeroMemory_(@itemrect.RECT, SizeOf(RECT))
itemrect\top = hitinfo\iSubItem
SendMessage_(hWnd, #LVM_GETSUBITEMRECT, hitinfo\iItem, @itemrect)
FreeGadget(#Stg)
StringGadget(#Stg, #PB_Ignore, #PB_Ignore, #PB_Ignore, #PB_Ignore, GetGadgetItemText(#Lig, Zeile, Spalte), #WS_EX_STATICEDGE | LigAusrichtGet())
SetParent_(GadgetID(#Stg), GadgetID(#Lig))
ResizeGadget(#Stg, itemrect\left + 6, itemrect\top, itemrect\right - itemrect\left - 11, itemrect\bottom - itemrect\top - 1)
SetActiveGadget(#Stg)
SendMessage_(GadgetID(#Stg), #EM_SETSEL, 0, -1)
Else
HideGadget(#Stg, 1)
EndIf
ElseIf uMsg = #WM_NOTIFY And IsWindowVisible_(GadgetID(1)) = 1
HideGadget(#Stg, 1)
EndIf
ProcedureReturn result
EndProcedure
If OpenWindow(#Win, #PB_Ignore, #PB_Ignore, 350, 250, "EditListIconGadget", #PB_Window_SystemMenu)
ListIconGadget(#Lig, 0, 0, 350, 250, "", 0, #PB_ListIcon_GridLines)
oldproc = SetWindowLongPtr_(GadgetID(#Lig), #GWL_WNDPROC, @SubClass_LV())
AddGadgetColumn(#Lig, 1, "GSM-Netz", 100)
AddGadgetColumn(#Lig, 2, "UMTS-Netz", 100)
AddGadgetColumn(#Lig, 3, "Festnetz", 115)
AddGadgetItem(#Lig, -1, #LF$ + "HSCSD" + #LF$ + "UMTS" + #LF$ + "Modem")
AddGadgetItem(#Lig, -1, #LF$ + "GPRS" + #LF$ + "HSPA" + #LF$ + "ISDN")
AddGadgetItem(#Lig, -1, #LF$ + "EDGE" + #LF$ + "HSPA+" + #LF$ + "DSL")
StringGadget(#Stg, 0, 0, 0, 0, "", #WS_EX_STATICEDGE) : HideGadget(#Stg, 1)
align.LV_COLUMN\mask = #LVCF_FMT
align\fmt = #LVCFMT_CENTER
SendMessage_(GadgetID(#Lig), #LVM_SETCOLUMN, 2, @align)
align\fmt = #LVCFMT_RIGHT
SendMessage_(GadgetID(#Lig), #LVM_SETCOLUMN, 3, @align)
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
Select EventGadget()
Case #Stg
Select EventType()
Case #PB_EventType_Change
SetGadgetItemText(#Lig, Zeile, GetGadgetText(#Stg), Spalte)
EndSelect
EndSelect
Case #PB_Event_CloseWindow
Select EventWindow()
Case #Win
CloseWindow(#Win)
Break
EndSelect
EndSelect
ForEver
EndIf
End