Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi OpenDialog, Multiselect, Listbox (https://www.delphipraxis.net/10310-opendialog-multiselect-listbox.html)

synex 15. Okt 2003 19:28


OpenDialog, Multiselect, Listbox
 
Hi Leute!

Ich hab ein Problem:

Ich habe einen OpenDialog, bei dem Multiselect eingeschaltet ist.
Dann habe ich noch 2 Listboxen. In die eine kommt der Dateiname ohne Pfad (Listbox1) und in die andere (Listbox2) kommt der Pfad noch dazu, also Pfad+Dateiname.

Das klappt auch wunderbar, ich kann mehrere Dateien im OpenDialog auswählen und sie werden wunderbar in die Listboxen eingefügt. Aber wenn ich jetzt nur eine Datei auswähle, dann wird sie nicht eingefügt.
Ich habe ncoh eine Funktion eingebaut, dass kein doppelter Eintrag vorkommt.

Hier ist der Code:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var i,ii:Integer;
begin
opendialog1.Options:=[ofAllowMultiSelect,ofEnableSizing];  //multiselect erlauben
if opendialog1.Execute then
begin
if opendialog1.Files.Count>1 then //falls multiselect
begin
for ii:= 0 to opendialog1.Files.Count-1 do
begin
i:=listbox1.items.IndexOf(extractfilename(opendialog1.Files.Strings[ii]));
if i<0 then //falls der Eintrag noch nicht existiert
begin
listbox1.Items.Append(extractfilename(opendialog1.Files.Strings[ii]));
listbox2.Items.Append(opendialog1.Files.Strings[ii]);
end;
end;
end;
end
//----------ende von multiselect
else
begin
i:=listbox1.items.IndexOf(extractfilename(opendialog1.Files[0]));
if i<0 then //falls der Eintrag noch nicht existiert
begin
listbox1.Items.Append(extractfilename(opendialog1.Files[0]));
listbox2.Items.Append(opendialog1.Files[0]);
end;
end;
end;
Mir scheint als würde er garnichterst zum else-Abschnitt kommen sondern sich schon vorher aus der Schleife verabschieden.

Wäre nett wenn mir einer weiterhelfen könnte

mfg synex

OLLI_T 15. Okt 2003 19:37

Re: OpenDialog, Multiselect, Listbox
 
HY Synex!

Ab und an mag es kein Fehler sein, die eine oder andere Zeile ein wenig einzurücken:

Delphi-Quellcode:
  opendialog1.Options:=[ofAllowMultiSelect,ofEnableSizing];  //multiselect erlauben
  if opendialog1.Execute then
  begin
    listbox1.Clear; listbox2.Clear;
    if opendialog1.Files.Count>1 then begin
      for ii:= 0 to opendialog1.Files.Count-1 do begin
        i:=listbox1.items.IndexOf(extractfilename(opendialog1.Files.Strings[ii]));
        if i<0 then begin
          listbox1.Items.Append(extractfilename(opendialog1.Files.Strings[ii]));
          listbox2.Items.Append(opendialog1.Files.Strings[ii]);
        end;
      end;
    end else begin
      i:=listbox1.items.IndexOf(extractfilename(opendialog1.Files[0]));
      if i<0 then begin
        listbox1.Items.Add(extractfilename(opendialog1.Files[0]));
        listbox2.Items.Add(opendialog1.Files[0]);
      end;
    end;
  end;
Prost denn

OLLI

Alexander 15. Okt 2003 20:15

Re: OpenDialog, Multiselect, Listbox
 
Probier mal:
Delphi-Quellcode:
if opendialog1.Files.Count >= 1 then

synex 15. Okt 2003 21:06

Re: OpenDialog, Multiselect, Listbox
 
@OLLI_T: Ich hab sowas von keinen Schimmer wieso, aber irgendwie scheint er deinen Code mehr zu mögen als meinen, denn dein Code klappt. Hab ihn bissel angepasst und jetzt läuft es wunderbar.

Danke!

mfg synex

OLLI_T 15. Okt 2003 21:14

Re: OpenDialog, Multiselect, Listbox
 
Du hattest ein "End;" zuviel des Guten!!! Wenn Du die Schachtelungsebenen konsequent - um wieviel Leerzeichen auch immer - einrückst, springt Dir sowas sofort ins Auge. 8)

Viele Grüsse

OLLI

michel22419 19. Apr 2004 12:13

Re: OpenDialog, Multiselect, Listbox
 
Die Lösung, um ALLE (FARBIG) MARKIERTEN Einträge (und nicht nur den Fokus-Eintrag) nacheinander abzuarbeiten ist:

Delphi-Quellcode:
procedure Tform_kunden.listbox_prodcount1Click(Sender: TObject);
var
  counter: Integer;
begin
  for counter := 0 to listbox_prodcount1.Items.Count - 1 do
    begin
      // markiert ?
      if (listbox_prodcount1.Selected[counter] = True) then
        begin
          // hier die Einträge nacheinander verarbeiten
          ShowMessage(listbox_prodcount1.Items[counter]);
        end;
    end;
end;
Have a nice day ...
Michel


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.

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