Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen (https://www.delphipraxis.net/67913-mit-opendialog-mehrere-dateien-gleichzeitig-hinzufuegen.html)

cruso 21. Apr 2006 18:33


Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Hi!

Was ich gerne wissen würde ist, ob es möglich ist mit Hilfe des OpenDialogs mehrere Dateien auf einmal auszuwählen und wenn, wie?
Es soll wenn die Shift-Taste gedrückt wird (oder irgendwie anders) möglich sein mehrere Dateien auf einmal auszuwählen und wenn man dann auf "Öffnen" klick sollen die Pfade dieser Dateien einer ListBox angehängt werden.
Könnt ihr mir vllt helfen?



MfG
Cruso

SirThornberry 21. Apr 2006 18:36

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
das geht mit einem OpenDialog. Du musst einfach bei den Optionen das Multiselect auf True setzen und dann kannst du über OpenDialog.Files (ich hoffe ich täusche mich nicht im Namen des Properties) die ausgewählten Dateien abfragen.

cruso 21. Apr 2006 18:39

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Zitat:

Zitat von SirThornberry
das geht mit einem OpenDialog. Du musst einfach bei den Optionen das Multiselect auf True setzen und dann kannst du über OpenDialog.Files (ich hoffe ich täusche mich nicht im Namen des Properties) die ausgewählten Dateien abfragen.


Also es kann sein, dass ich momentan Blind bin aber Multiselect finde ich nirgens.

Flare 21. Apr 2006 18:45

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Es heißt Options/ofAllowMultiSelect


Flare

leddl 21. Apr 2006 18:47

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Du bist zumindest teilweise blind :zwinker:
Die gesuchte Porperty befindet sich unter Options --> ofAllowMultiSelect ;)

//Edit: Holla, das war gerade noch nich da :gruebel:

cruso 21. Apr 2006 18:50

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Um eine Datei hinzuzufügen habe ich das bisher so geregelt:

Delphi-Quellcode:
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
  if OpenDialog1.Execute then
try
  ListBox1.Items.Add(OpenDialog1.FileName);
  ListBox1.Items.SaveToFile(GAD+'Data.txt');
except
  Application.MessageBox('Die Datei konnte nicht geladen werden!','Unzulässige Benutzereingabe',16);
end;
end;

Wie muss ich das nun regeln?

markusj 21. Apr 2006 18:52

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Du findest unter Files eine StringList mit den Dateipfaden ... such dir raus welche du laden willst^^ *g*

mfG

Markus

turboPASCAL 21. Apr 2006 18:53

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Delphi-Quellcode:
procedure TFormX.ButtonClick...
var i: Integer;
begin
  OpenDialog1.Options := [ofReadOnly, ofAllowMultiSelect];

  if OpenDialog1.Execute then
  begin
   memo1.Lines := OpenDialog1.Files;

   //oder einzeln auslesen:
   // for i := 0 to OpenDialog1.Files.Count - 1 do
   //   ... := OpenDialog1.Files[i];

  end;
end;

cruso 21. Apr 2006 19:03

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Danke für eure Hilfe! Es funktioniert.

danku 28. Apr 2006 19:50

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
und wie funktioniert das bei einer stringgrid (nur 1column) wenn man mehrere dateien über einen topendialog1 in die cells "klickt" ;)?
wäre eine tstringlist besser?


Prinzip/Aufbau:

tmemo -> Pfad/Ordner der Datei
tbutton: öffnet opendialog1 (ofmultiselect TRUE)
tstringgrid: zeigt ergebnis von opendialog1 an

Delphi-Quellcode:
procedure Tfmformat.bopenClick(Sender: TObject);
var pfad:string;
i,s: byte;

{ OPENDIALOG1 Options:
 - ofNoDerencesLinks - Path ausstellen
 - ofNoLongName     - .. // nur in Verbindung mit ofOldStyleDialog
 - ofNoReadOnlyReturn   Zeigt eine Fehlermeldung an, wenn schreibgeschützte Datei }

begin


//****************STRINGGRID********************
       if OpenDialog1.Execute then
            begin
       //   pfad:= OpenDialog1.FileName;
       //   AddFiles(sl, OpenDialog1.FileName);

//Füllen aus TOpendialog1
 for i := 0 to OpenDialog1.Files.Count - 1 do          
 sgfiles.cells[0,1+i]:= OpenDialog1.Filename;            

//Sobald 2xDateien gewählt werden, wird nur 1 aber 2x in die TStringgrid geschrieben



 {//repeat
 while
 sgfiles.cells[0,i+1]=opendialog1.Files.strings[i] do
 inc(i);
 //Neue Zeile einfügen
 sgfiles.RowCount:=sgfiles.RowCount+1;}


 end;
 end;

Hawkeye219 28. Apr 2006 20:34

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Hallo danku,

im Code von turboPASCAL (Beitrag #8) steht bereits die Lösung deines Problems. Bei mehreren ausgewählten Dateien erfolgt der Zugriff nicht über OpenDialog.FileName sondern über das Array OpenDialog.Files[].

In deinem Beispiel sieht das dann so aus:

Delphi-Quellcode:
for i := 0 to OpenDialog1.Files.Count - 1 do          
  sgfiles.cells[0, 1 + i]:= OpenDialog1.Files[i];
Gruß Hawkeye

danku 28. Apr 2006 20:40

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
jo das könnt so passen. :roll:
auf das [i] hätte ich auch kommen können... :wall:
zumal ich schon mal das dastehen hatte..

ich mach jetzt mal jetzt mal die einträge abhängig von der zeile beim einfügen :coder2:

Edit:

Delphi-Quellcode:
//Füllen der StringGrid mit Opendialog1Daten
          for i := 0 to OpenDialog1.Files.Count - 1 do
            sgfiles.cells[0,1 + i]:= OpenDialog1.Files[i];
            if OpenDialog1.Files.Count >= sgfiles.rowcount
            then sgfiles.RowCount:=sgfiles.RowCount+1;
            end;
          end;
Natürlich musste wieder ein Extremfall passieren...

Wenn man mehrere Dateien im opendialog wählt, geht das ja,
aber so bald man dateien aus der 2.spalte im dialog auswählt
gibts probs...

Wobei ich gerade merkte das (rowcount=2) sobald mehr als

wieso?

danku 29. Apr 2006 09:49

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
kann mir da einer helfen?

Hawkeye219 29. Apr 2006 11:04

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Hallo danku,

warum erhöhst du die Zeilenzahl des Grids bei jedem Durchlauf? Du kennst doch die Anzahl der ausgewählten Dateien und kannst somit die Zeilenzahl vor der Schleife setzen:

Delphi-Quellcode:
// 1 Headerzeile + 1 Zeile pro ausgewählter Datei
sgfiles.RowCount := OpenDialog1.Files.Count + 1;

// Füllen des StringGrids mit den Namen der ausgewählten Dateien
for i := 0 to OpenDialog1.Files.Count - 1 do
  sgfiles.Cells[0, 1 + i] := OpenDialog1.Files[i];
PS: Pushen von Beiträgen frühestens nach 24 Stunden :wink:

//Edit: ich sehe gerade, daß ein Logikfehler in deinem Code vorliegt. Die FOR-Schleife überträgt nur alle Dateien, danach erhöhst du evtl. die Zeilenzahl im Grid um 1. Die Einrückung läßt vermuten, daß ein BEGIN fehlt. Die Zeilenzahl solltest du trotzdem vor der Schleife setzen.

Gruß Hawkeye

danku 29. Apr 2006 12:13

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
es geht ohne dein "begin"

Delphi-Quellcode:
  //Füllen der StringGrid mit Opendialog1Daten
   i:=opendialog1.files.count-1;
   sgfiles.RowCount := OpenDialog1.Files.Count + 1;

   for i := 0 to OpenDialog1.Files.Count - 1 do
   begin
   sgfiles.cells[0,1 + i]:= OpenDialog1.Files[i];
   end;
   inc(i);

Hawkeye219 29. Apr 2006 12:34

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Das BEGIN hätte auch nur deinen alten Code korrigiert, der neue ist auf jeden Fall besser. Die erst und die letzte Zeile kannst/solltest du allerdings noch ersatzlos streichen. Die erste Zuweisung zur Variablen i wird durch die FOR-Schleife sowieso überschrieben, beim "Inc (i)" greifst du nach der FOR-Schleife auf die Schleifenvariable zu. Deren Inhalt ist aber hinter der Schleife undefiniert.

Gruß Hawkeye

danku 29. Apr 2006 14:17

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
wie kann ich erreichen das die komplette stringgrid "durchcompiliert" wird und die leerzeichen gelöscht werden?

Delphi-Quellcode:
if rgmenue.ItemIndex = 0
      then begin

      PROBLEM 1

      for i:= 0 to 1000 do //Komplett search_text in Zelle gelöscht ->beschleunigt abschnittsw. l.
            begin
            Position := 1;
            S := sgfiles.Cells[0,1];          
              for zaehlen := 0 to length(S) do //search_text abschnittsweise löschen
                begin
                //Position des Search_Text ('_')
                  Position := GetPosNumX(Search_Text, S, Position);
                //Löscht diese Stelle
                  Delete(S, Position, length(Search_Text));

                  PROBLEM 2

                  end;
              sgfiles.Cells[0,1]:= S;
              inc(a,i);
              end;

              ///// Löschen
              for i:= 0 to 1000 do
                begin
                Position := 1;
                S := sgfiles.Cells[0,1];

                  for zaehlen := 0 to length(S) do
                    begin
                      Position := GetPosNumX(Search_Text, S, Position);
                      Delete(S, Position, length(Search_Text));

                      end;
                  sgfiles.Cells[0,1]:= S;
                  inc(a,i);
                  end;
problem1:
Es wird jeweils zuerst nur in der Zelle nach dem (Search_Text = '_') gesucht und dieser gelöscht. aber das passiert nur abschnittsweise. und nicht in der gesamten zelle komplett.

problem2:
wäre es besser eine replace-prozedur zur schreiben, um '_' durch '' zu ersetzen oder doch lieber bei meiner jetzigen variante und dann noch nach dem löschen ein leerzeichen dazuzufügen?

turboPASCAL 29. Apr 2006 14:30

Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
 
Der Thread hat den Titel:

Zitat:

Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
und deine Frage ist:

Zitat:

wie kann ich erreichen das die komplette stringgrid "durchcompiliert" wird und die leerzeichen gelöscht werden?
:gruebel:


Mach dazu bitte einen eigenen neuen Thread auf.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:12 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz