OpenFileRequester (Anzahl ausgewählter Dateien)

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Ghosty1967
Beiträge: 203
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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 
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Ghosty1967
Beiträge: 203
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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 :allright:
ST4242
Beiträge: 42
Registriert: 29.10.2011 16:54

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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
Benutzeravatar
Ghosty1967
Beiträge: 203
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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
:lol:
Benutzeravatar
Ghosty1967
Beiträge: 203
Registriert: 29.08.2005 13:56
Computerausstattung: Intel i7, 128GB Ram, Win10 Ultimate, PB6.00 Alpha 3
Wohnort: Köln

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag von Ghosty1967 »

...da war einer schneller! :lol:
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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.
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: OpenFileRequester (Anzahl ausgewählter Dateien)

Beitrag 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
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Antworten