
lg Kevin
padawan hat geschrieben:Ich liebe diese von hinten über die Brust ins Auge Lösungen
korrigier mich, wenn ich falsch liege, aber da zwischen HideGadget(..., #True) und HideGadget(..., #False) keine Eventverarbeitung stattfindet, dürfte das Gadget nicht sichtbar verschwinden.RSBasic hat geschrieben:Sonst sieht es komisch aus, wenn während der Laufzeit das Gadget einfach für eine Sekunde verschwindet und anschließend wieder auftaucht.
Aber wenn keine Eventverarbeitung stattfinden sollte, so gäbe es auch keinerlei AuswirkungenKiffi hat geschrieben:korrigier mich, wenn ich falsch liege, aber da zwischen HideGadget(..., #True) und HideGadget(..., #False) keine Eventverarbeitung stattfindet, dürfte das Gadget nicht sichtbar verschwinden.
Danke dir Edel,edel hat geschrieben:0 ms![]()
Code: Alles auswählen
EnableExplicit Structure struct a.s b.s c.s d.s EndStructure #ARRAY_SIZE = 37000 Global Dim List.struct(#ARRAY_SIZE) Procedure Callback(hwnd, msg, wparam, lparam) Protected *hdr.NMHDR Protected *di.NMLVDISPINFO Protected str.i If msg = #WM_NOTIFY *hdr = lparam If *hdr\code = #LVN_GETDISPINFO *di = lparam Select *di\item\iSubItem Case 0 str.i = @List(*di\item\iItem)\a Case 1 str.i = @List(*di\item\iItem)\b Case 2 str.i = @List(*di\item\iItem)\c Case 3 str.i = @List(*di\item\iItem)\d EndSelect *di\item\pszText = str ProcedureReturn #True EndIf EndIf ProcedureReturn #PB_ProcessPureBasicEvents EndProcedure Procedure InitArray() Protected a For a = 0 To #ARRAY_SIZE 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 EndProcedure Procedure Main() Protected EventID InitArray() If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) SetWindowCallback(@Callback(), 0) ListIconGadget(1, 10, 10, 480, 380, "Spalte 1", 100, #LVS_OWNERDATA | #PB_ListIcon_FullRowSelect) AddGadgetColumn(1, 1, "Spalte 2", 100) AddGadgetColumn(1, 2, "Spalte 3", 100) AddGadgetColumn(1, 3, "Spalte 4", 100) SendMessage_(GadgetID(1), #LVM_SETITEMCOUNT, #ARRAY_SIZE, 0) Repeat Until WaitWindowEvent() = #PB_Event_CloseWindow EndIf EndProcedure:End Main()
Das scheint wohl auch nicht mehr zu funktionieren. Man kann aber eine Checkbox selber einbauen.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
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()