Mehrere Datein mit einem ÖffnenDialog
Mehrere Datein mit einem ÖffnenDialog
Hallo ihr,
ich versuche gerade mit einem TOpenDialog mehrere Datein einzulesen. D.h., dass der User im Dialogfenster mehrere Datein markieren kann, um diese dann in das Programm einzubinden. Wie kann ich das realisieren ?
Normalerweise fange ich ja über OpenDialog.Filename den Pfad der Datei ab, kann man das also auch iwi mit mehreren Datein machen ?
ich versuche gerade mit einem TOpenDialog mehrere Datein einzulesen. D.h., dass der User im Dialogfenster mehrere Datein markieren kann, um diese dann in das Programm einzubinden. Wie kann ich das realisieren ?
Normalerweise fange ich ja über OpenDialog.Filename den Pfad der Datei ab, kann man das also auch iwi mit mehreren Datein machen ?
-
- Beiträge: 565
- Registriert: So 26. Aug 2012, 09:03
- OS, Lazarus, FPC: Windows(10), Linux(Arch)
- CPU-Target: 64Bit
Re: Mehrere Datein mit einem ÖffnenDialog
Hallo Inventio
Einfach Opendialog1.Files benutzten (TStrings) anstatt von Opendialog1.Filename (string)
LG Komoluna
Einfach Opendialog1.Files benutzten (TStrings) anstatt von Opendialog1.Filename (string)
LG Komoluna
Programmer: A device to convert coffee into software.
Rekursion: siehe Rekursion.
Rekursion: siehe Rekursion.
Re: Mehrere Datein mit einem ÖffnenDialog
Zuerst noch bei den Options ofAllowMultiSelect dazunehmen.
Re: Mehrere Datein mit einem ÖffnenDialog
Danke! Ich werde es morgen mal ausprobieren!
Lg Inventio
Lg Inventio
Re: Mehrere Datein mit einem ÖffnenDialog
Hey ihr,
habe das ganze jetzt ausprobiert und es erscheint mir auch richtig, jedoch bekomme ich einen SIGSEGV error, wenn ich datein einbinden möchte.
Was ich genau machen will. In ein Array of String (DateiName) die dateipfade speichern.
So sieht das ganze bei mir aus:
Wo ist mein Fehler? Für mich scheint der code richtig.
Mfg Inventio
habe das ganze jetzt ausprobiert und es erscheint mir auch richtig, jedoch bekomme ich einen SIGSEGV error, wenn ich datein einbinden möchte.
Was ich genau machen will. In ein Array of String (DateiName) die dateipfade speichern.
So sieht das ganze bei mir aus:
Code: Alles auswählen
OpenDialog1.Options := [ofAllowMultiSelect, ofFileMustExist];
if OpenDialog1.Execute then
begin
for u := 0 to OpenDialog1.Files.Count - 1 do
begin
DateiName[u] := OpenDialog1.Files.Strings[u];
end;
end;
Wo ist mein Fehler? Für mich scheint der code richtig.
Mfg Inventio
Re: Mehrere Datein mit einem ÖffnenDialog
Nimm einfach eine TStringList und benutze Assign. Man muss das Rad nicht immer neu erfinden.Inventio hat geschrieben: Was ich genau machen will. In ein Array of String (DateiName) die dateipfade speichern.
Re: Mehrere Datein mit einem ÖffnenDialog
Hast du da ein kleines Code-Beispiel für mich ? Hab mit sowas leider noch nie gearbeitet...theo hat geschrieben:Nimm einfach eine TStringList und benutze Assign. Man muss das Rad nicht immer neu erfinden.Inventio hat geschrieben: Was ich genau machen will. In ein Array of String (DateiName) die dateipfade speichern.
LG
Re: Mehrere Datein mit einem ÖffnenDialog
Einfach suchen. Z.B. hier http://www.delphibasics.co.uk/RTL.asp?Name=TStringList
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Mehrere Datein mit einem ÖffnenDialog
Da kann es hilfreich sein, sich mit F7 und F8 schrittweise durch den relevanten Code zu hangeln. Dann weiß man nämlich auch an welcher Stelle der Fehler kommt.Inventio hat geschrieben:habe das ganze jetzt ausprobiert und es erscheint mir auch richtig, jedoch bekomme ich einen SIGSEGV error, wenn ich datein einbinden möchte.
Wie gesagt, probier es mit schrittweisen Debugging. Ein Ansatzpunkt wäre das Array DateiName. Ist es überhaupt groß genug?Inventio hat geschrieben:Code: Alles auswählen
OpenDialog1.Options := [ofAllowMultiSelect, ofFileMustExist]; if OpenDialog1.Execute then begin for u := 0 to OpenDialog1.Files.Count - 1 do begin DateiName[u] := OpenDialog1.Files.Strings[u]; end; end;
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Mehrere Datein mit einem ÖffnenDialog
Es ist ein dynamisches Array of Stringm.fuchs hat geschrieben:Da kann es hilfreich sein, sich mit F7 und F8 schrittweise durch den relevanten Code zu hangeln. Dann weiß man nämlich auch an welcher Stelle der Fehler kommt.Inventio hat geschrieben:habe das ganze jetzt ausprobiert und es erscheint mir auch richtig, jedoch bekomme ich einen SIGSEGV error, wenn ich datein einbinden möchte.
Wie gesagt, probier es mit schrittweisen Debugging. Ein Ansatzpunkt wäre das Array DateiName. Ist es überhaupt groß genug?Inventio hat geschrieben:Code: Alles auswählen
OpenDialog1.Options := [ofAllowMultiSelect, ofFileMustExist]; if OpenDialog1.Execute then begin for u := 0 to OpenDialog1.Files.Count - 1 do begin DateiName[u] := OpenDialog1.Files.Strings[u]; end; end;
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Mehrere Datein mit einem ÖffnenDialog
Das ist keine Antwort auf meine Frage.Inventio hat geschrieben:Es ist ein dynamisches Array of Stringm.fuchs hat geschrieben:[...]ein Ansatzpunkt wäre das Array DateiName. Ist es überhaupt groß genug?
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Mehrere Datein mit einem ÖffnenDialog
Dann habe ich deine Frage nicht verstanden....mit "groß genug" habe ich die länge des Arrays assoziiert
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Mehrere Datein mit einem ÖffnenDialog
Dann hast du die Frage richtig verstanden.Inventio hat geschrieben:Dann habe ich deine Frage nicht verstanden....mit "groß genug" habe ich die länge des Arrays assoziiert
Ein statisches Array kann seine Größe nicht ändern.
Ein dynamisches Array kann seine Größe ändern, muss dies aber nicht tun. Insbesondere ändert es sich nicht selbst.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
- m.fuchs
- Lazarusforum e. V.
- Beiträge: 2805
- Registriert: Fr 22. Sep 2006, 19:32
- OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
- CPU-Target: x86, x64, arm
- Wohnort: Berlin
- Kontaktdaten:
Re: Mehrere Datein mit einem ÖffnenDialog
Um es noch weiter zu präzisieren: Hast du irgendwo die Größe des Arrays auf einen Wert gesetzt, der garantiert nicht kleiner als die Anzahl der vom Benutzer ausgewählten Dateien ist?
Oder fehlt vielleicht einfach vor deiner For-Schleife folgende Zeile:
Oder fehlt vielleicht einfach vor deiner For-Schleife folgende Zeile:
Code: Alles auswählen
SetLength(DateiName, OpenDialog1.Files.Count)
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de
Re: Mehrere Datein mit einem ÖffnenDialog
m.fuchs hat geschrieben:Um es noch weiter zu präzisieren: Hast du irgendwo die Größe des Arrays auf einen Wert gesetzt, der garantiert nicht kleiner als die Anzahl der vom Benutzer ausgewählten Dateien ist?
Oder fehlt vielleicht einfach vor deiner For-Schleife folgende Zeile:Code: Alles auswählen
SetLength(DateiName, OpenDialog1.Files.Count)
Ich habe es jetzt mit einer TStringList gelöst, das passt! Danke für eure Hilfe!
Jetzt sieht das ganze so aus:
Code: Alles auswählen
//variablen
type
TFrage = record
ID : Integer;
Frage : String[255];
Ant1 : String[255];
Ant2 : String[255];
Ant3 : String[255];
Correct : String[1];
end;
Gesamte_Fragen = Array[1..600] of TFrage;
Fragebogen = Gesamte_Fragen;
var DateiName : TStringList;
FragenKatalog: Array of Fragebogen;
//Code
procedure TPerformancePusher.DateiPfadeSpeichern;
var i : integer;
begin
OpenDialog1.Options := [ofAllowMultiSelect, ofFileMustExist];
if OpenDialog1.Execute then
begin
DateiName := TStringList.Create;
with OpenDialog1.Files do
for i := 0 to Count - 1 do
begin
DateiName.Add(Strings[i]);
end;
end;
end;
Nur jetzt bekomme ich natürlich Fehler beim Lesen der Datein. Hierbei ist zu sagen, dass ich ein Record TFrage erstellt habe, dass eine Frage mit ihren Attributen (Der Frage und ihren Antworten) speichert.
Ich habe eine Variable Datei vom Typ Gesamte_Fragen (Gesamte_Fragen = Array[1..600] of TFrage), einen Fragebogen (Fragebogen = Gesamte_Fragen; Das habe ich so gewählt, da ich das früher schon so programmiert habe und sich das leider nicht ändern lässt...) und einen Fragenkatalog (Fragenkatalog : Array of Fragebogen).
Nun möchte ich mit folgendem Code den Fragenkatalog füllen, sodass an jeder Stelle von FragenKatalog ein Fragebogen vorhanden ist. Also ist FragenKatalog[1] ein Fragebogen.
So sieht mein Code daür aus :
Code: Alles auswählen
//variablen
var Datei : File of Gesamte_Fragen;
//Code
procedure TPerformancePusher.DateiLaden;
var i : integer;
begin
for i := 0 to DateiName.count -1 do
begin
AssignFile(Datei, DateiName[i]);
{$I-}Reset(Datei);
Read(Datei, Fragenkatalog[i]);
IF IORESULT <> 0 THEN
begin
Showmessage('Fehler beim Lesen der Daten! Ende.');
end;
CloseFile(Datei);{$I+}
end;
end;