folgendes Problem: Der Befehl
Code: Alles auswählen
GetGadgetState(#ExplorerList)Gruß Karl
Code: Alles auswählen
GetGadgetState(#ExplorerList)Code: Alles auswählen
If OpenWindow(0,0,0,400,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ExplorerListGadget") And CreateGadgetList(WindowID(0))
ExplorerListGadget(0, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadgetID() = 0
Datei = ""
For i=0 To CountGadgetItems(0)-1
If GetGadgetItemState(0, i) = 1
Datei.s + GetGadgetItemText(0, i, 0) + ";"
EndIf
Next
Debug Datei
EndIf
Until Event=#PB_Event_CloseWindow
EndIf
Code: Alles auswählen
If OpenWindow(0,0,0,400,200,#PB_Window_SystemMenu|#PB_Window_ScreenCentered,"ExplorerListGadget") And CreateGadgetList(WindowID(0))
ExplorerListGadget(0, 10, 10, 380, 180, "*.*", #PB_Explorer_MultiSelect)
Repeat
Event = WaitWindowEvent()
If Event = #PB_Event_Gadget And EventGadgetID() = 0
Datei.s = ""
For I=0 To CountGadgetItems(0)-1
If GetGadgetItemState(0, I) & #PB_Explorer_Selected
Datei.s + GetGadgetItemText(0, I, 0) + ";"
EndIf
Next
Debug Datei
EndIf
Until Event=#PB_Event_CloseWindow
EndIfDa PureBasic zur Bereitstellung eines solchen Arrays ebenfalls alle Einträge in einer Schleife durchgehen müsste und ebenso auch eine API-Funktion, stellt sich die Frage ob es wirklich so sinnvoll wäre dies einzubauen. Nehmen wir einmal an, jemand will kein solches Array oder muss evtl. auch auf die nicht ausgewählten Einträge eingehen, er würde alleine durch das Erstellen des zusätzlichen Arrays unnötig Speicherplatz und ,was wahrscheinlich noch wichtiger ist, Geschwindigkeit verlieren. Ob dass dann immer noch effizient ist bleibt dahingestellt.Karl hat geschrieben:Hallo,
nun ja. Diese Art Schleife ist eigentlich nur zweite Wahl (trotzdem Danke für den Hinweis). Bei den Requestern gibt es ja auch die Möglichkeit, auf das nächste ausgewählte File zuzugreifen.
Im Prinzip weiss ja Windows schon, welche Dateien ausgewählt sind. Vielleicht könnte man einen Index-Array als feste Funktion beim nächsten Release einbauen.
Warum? Angenommen die Dateiliste enthält einige hundert oder tausend Dateien (gerade bei Temp-Ordnern). Das Testen ob ein Eintrag ausgewählt ist oder nicht, ist nicht unbedingt effizient.
Vielleicht gibt es ja auch über WinAPI ne Lösung.
Gruß Karl
Code: Alles auswählen
index = GetGadgetState(#ExplorerList)
If index <> -1 ; wenn nix selektiert ist kann man hier schon abbrechen
total = CountGadgetItems(#ExplorerList)
Repeat
;
; aktion für selektierte Dateien
;
index + 1
Until index >= total Or GetGadgetItemState(#ExplorerList, index) & #PB_Explorer_Selected = 0
EndIf