Seite 1 von 1
OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 09:22
von Ghosty1967
Hallo zusammen...
Wahrscheinlich sehe ich wieder einmal den Wald vor lauter Bäumen nicht aber, wie kann ich bei "#PB_Requester_MultiSelection" herausfinden,
wieviele Dateien geöffnet werden sollen
bevor ich mit "NextSelectedFileName()" die Aufzählung starte?
Code: Alles auswählen
selectedFiles.s = OpenFileRequester("Dateien hinzufügen", "", "*.*", 0, #PB_Requester_MultiSelection)
; hier brauche ich die Anzahl der ausgewählten Dateien
While selectedFiles
...
Wend
Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 11:40
von ccode_new
WARUM ?
Das macht keinen Sinn.
Du benötigst: NextSelectedFileName()
Es ist egal ob vor der While-Schleife oder danach.
In jedem Fall müsstest du zählen und NextSelectedFileName() arbeitet recht flott.
Du zählst hierbei einfach innerhalb der Schleife.
Code: Alles auswählen
While FileName$
FileName$ = NextSelectedFileName()
Counter + 1
Wend
Debug Counter
Sei froh das du dir nicht die dahinterstehende Windows API antun musst.
Ansonsten bastel dir einen Dateiauswahldialog mit den Explorer - Gadgets.
Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 12:23
von Ghosty1967
Warum: ...weil ich eine Prozentanzeige, welche mir angibt "wieviele" Dateien bereits geöffnet wurden mitlaufen lassen möchte.
Einen eigenen Dialog zu basteln wäre meine zweite Wahl gewesen...dachte, es gibt vielleicht eine "einfachere" Lösung.
Danke

Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 13:34
von ST4242
Hallo,
eventuell einfach alle Dateinamen in eine Linkedlist einlesen. Dann ist die Anzahl bekannt.
Dann die Dateien der LinkedList bearbeiten
Code: Alles auswählen
NewList FileNames.s()
While FileName$
AddElement(FileNames())
FileNames()= NextSelectedFileName()
Counter + 1
Wend
Debug Counter
ForEach FileNames()
; datei bearbeiten
Next
Grüße
Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 13:37
von Ghosty1967
Eine Lösung wäre ja z.B. erst die vom "OpenFileRequester" erstellten Daten (wie immer diese aufgebaut seien..) in
eine Liste zu speichern und deren Elementgröße später per ListSize() zu ermitteln. Ist aber doch echt umständlich
Code: Alles auswählen
NewList files.s()
selectedFiles.s = OpenFileRequester("Dateien hinzufügen", "", "*.*", 0, #PB_Requester_MultiSelection)
While selectedFiles
AddElement(files())
files() = selectedFiles
selectedFiles = NextSelectedFileName()
Wend
Debug ListSize(files())
ForEach files()
Debug files()
Next

Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 13:38
von Ghosty1967
...da war einer schneller!

Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 14:27
von Nino
ST4242 hat geschrieben:einfach alle Dateinamen in eine Linkedlist einlesen. Dann ist die Anzahl bekannt.
Dann die Dateien der LinkedList bearbeiten
So würde ich's machen.
Re: OpenFileRequester (Anzahl ausgewählter Dateien)
Verfasst: 04.01.2020 14:45
von ccode_new
Genau so würde ich das auch machen.
Über die Windows-Api müsstest du auch erst alle NULL - Zeichen filtern.
(Das macht NextSelectedFileName() für dich.)
Code: Alles auswählen
Global odiag.OPENFILENAME
Global *file_buffer = AllocateMemory(1024)
Global counter = 0
odiag\lStructSize = SizeOf(odiag)
odiag\lpstrFile = *file_buffer
odiag\lpstrTitle = @"Mein Dateidialog"
odiag\hWndOwner = #Null
odiag\nMaxFile = 1024
odiag\Flags = #OFN_ALLOWMULTISELECT | #OFN_EXPLORER
GetOpenFileName_(@odiag)
;UTF8
For i = 0 To MemorySize(*file_buffer) Step 2
If PeekC(*file_buffer + i) = #Null
counter + 1
If Not (PeekC(*file_buffer + (i + 1)) <> #Null)
If counter > 1
counter - 1
EndIf
Break
EndIf
EndIf
Next
Debug counter