![]() |
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 |
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.
|
Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
Zitat:
Also es kann sein, dass ich momentan Blind bin aber Multiselect finde ich nirgens. |
Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
Es heißt Options/ofAllowMultiSelect
Flare |
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: |
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? |
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 |
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; |
Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
Danke für eure Hilfe! Es funktioniert.
|
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; |
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:
Gruß Hawkeye
for i := 0 to OpenDialog1.Files.Count - 1 do
sgfiles.cells[0, 1 + i]:= OpenDialog1.Files[i]; |
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:
Natürlich musste wieder ein Extremfall passieren...
//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; 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? |
Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
kann mir da einer helfen?
|
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:
PS: Pushen von Beiträgen frühestens nach 24 Stunden :wink:
// 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]; //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 |
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); |
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 |
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:
problem1:
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; 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? |
Re: Mit OpenDialog mehrere Dateien gleichzeitig hinzufügen
Der Thread hat den Titel:
Zitat:
Zitat:
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