Joshua314 hat geschrieben:
Danke dir Edel,
stimmt, diese Version ist sehr schnell, sozusagen Blitz schnell.
Ich konnte deine Version auch erfolgreich einbauen.
Leider habe ich es nicht geschafft, eine Checkbox dazu zu machen.
Auch hab ich keine Ahnung, wie ich die Checkbox, wenn Diese dann da ist, wieder abfragen kann.
Kannst du mir hier noch einmal aushelfen?
Gruß Thomas
Das scheint wohl auch nicht mehr zu funktionieren. Man kann aber eine Checkbox selber einbauen.
Abrufen kannst du das dann einfach ueber das Array.
Code: Alles auswählen
Structure checkbox
s.s
state.l
EndStructure
Structure struct
a0.checkbox
a.s
b.s
c.s
d.s
EndStructure
Global Theme
#BP_CHECKBOX = 3
#CBS_CHECKEDNORMAL = 5
#CBS_UNCHECKEDNORMAL = 1
#ARRAY_SIZE = 37300
Global Dim List.struct(#ARRAY_SIZE)
Procedure Callback(hwnd, msg, wparam, lparam)
Protected *hdr.NMHDR
Protected *di.NMLVDISPINFO
Protected str.i
Protected *t.NMITEMACTIVATE
Protected t0.LVHITTESTINFO
If msg = #WM_NOTIFY
*hdr = lparam
If *hdr\code = #NM_DBLCLK
*t = lparam
If List(*t\iItem)\a0\state
List(*t\iItem)\a0\state = 0
Else
List(*t\iItem)\a0\state = 1
EndIf
InvalidateRect_(*hdr\hwndFrom, 0, 0)
EndIf
If *hdr\code = #NM_CLICK
*t = lparam
t0\pt = *t\ptAction
SendMessage_(*hdr\hwndFrom, #LVM_SUBITEMHITTEST, 0, t0)
If t0\flags & #LVHT_ONITEMICON = #LVHT_ONITEMICON
If List(t0\iItem)\a0\state
List(t0\iItem)\a0\state = 0
Else
List(t0\iItem)\a0\state = 1
EndIf
EndIf
InvalidateRect_(*hdr\hwndFrom, 0, 0)
EndIf
If *hdr\code = #LVN_GETDISPINFO
*di = lparam
Select *di\item\iSubItem
Case 0
*di\item\iImage = List(*di\item\iItem)\a0\state
str.i = @List(*di\item\iItem)\a0\s
Case 1
str.i = @List(*di\item\iItem)\a
Case 2
str.i = @List(*di\item\iItem)\b
Case 3
str.i = @List(*di\item\iItem)\c
Case 4
str.i = @List(*di\item\iItem)\d
EndSelect
*di\item\pszText = str
EndIf
EndIf
ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure
Procedure InitArray()
Protected a
For a = 0 To #ARRAY_SIZE
List(a)\a0\state = 0
List(a)\a0\s = "check " + Str(a)
List(a)\a = "Hallo " + Str(a)
List(a)\b = "Pure " + Str(a)
List(a)\c = "Basic " + Str(a)
List(a)\d = "Welt " + Str(a)
Next
ProcedureReturn a
EndProcedure
Procedure InitCheckBoxImageListForListIconGadgetHahaIstDasEinLangerNameObderNochLaengerWerdenDarfFragezeichen(Gadget)
Protected rc.rect
Protected image.i
Protected imagelist.i
Protected hdc.i
Theme = OpenThemeData_(GadgetID(gadget), "Button")
rc\left = 0
rc\top = 0
rc\right = 16
rc\bottom = 16
imagelist = ImageList_Create_( rc\right, rc\bottom, #ILC_COLOR, 2, 0 )
image = CreateImage(#PB_Any, rc\right, rc\bottom)
hdc = StartDrawing(ImageOutput(image))
DrawThemeParentBackground_(GadgetID(gadget), hdc, rc)
DrawThemeBackground_(Theme, hdc, #BP_CHECKBOX, #CBS_UNCHECKEDNORMAL, rc, #Null)
StopDrawing()
ImageList_Add_(imagelist, ImageID(image), #Null)
hdc = StartDrawing(ImageOutput(image))
DrawThemeParentBackground_(GadgetID(gadget), hdc, rc)
DrawThemeBackground_(Theme, hdc, #BP_CHECKBOX, #CBS_CHECKEDNORMAL, rc, #Null);
StopDrawing()
ImageList_Add_(imagelist, ImageID(image), #Null)
SendMessage_(GadgetID(gadget), #LVM_SETIMAGELIST, #LVSIL_SMALL, imagelist)
EndProcedure
Procedure Main()
Protected EventID
If OpenWindow(0, 0, 0, 600, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
SetWindowCallback(@Callback(), 0)
ListIconGadget(1, 10, 10, 580, 380, "Spalte 1", 150, #LVS_OWNERDATA | #PB_ListIcon_CheckBoxes |#PB_ListIcon_FullRowSelect|#PB_ListIcon_GridLines)
AddGadgetColumn(1, 1, "Spalte 2", 100)
AddGadgetColumn(1, 2, "Spalte 3", 100)
AddGadgetColumn(1, 3, "Spalte 4", 100)
AddGadgetColumn(1, 4, "Spalte 5", 100)
InitCheckBoxImageListForListIconGadgetHahaIstDasEinLangerNameObderNochLaengerWerdenDarfFragezeichen(1)
SendMessage_(GadgetID(1), #LVM_SETITEMCOUNT, InitArray(), 0)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
CloseThemeData_(Theme)
EndIf
EndProcedure:End Main()