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 Senden an (https://www.delphipraxis.net/25830-senden.html)

sui 13. Jul 2004 12:24


Senden an
 
Moin,

ich befasse mich grad mit den CheckListboxen. Und da ich eben noch einen
Code zum auslesen des Pfades der SpecialFolder gefunden hab, dachte ich,
ich mach ein Progrämmchen, um das Senden an... Menü zu modifizieren.

Mein Hauptproblem ist jetzt, wie ich die markierten Einträge löschen kann.

Habs hiermit versucht: Checklistbox1.Items.Delete(i);
Bekomme dann aber die Meldung: Listenindex überschreitet das Maximum(6):

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var s, path: string;
    i: integer;
    stl: tstringlist;

begin
path := (GetSpecialFolder(Handle, CSIDL_Sendto) + '\*.*'#0);
s := path;
CheckListBox1.Perform(LB_DIR, DDL_READWRITE, LongInt(@s[1]));
Checklistbox1.ItemIndex:=0;
stl := tstringlist.Create;
try
for i := 0 to Checklistbox1.items.Count - 1 do
begin
stl.Add(CheckListbox1.items.strings[Checklistbox1.itemindex]);
Checklistbox1.itemindex := Checklistbox1.itemindex+1;
end;
Checklistbox1.items.CommaText := stl.commatext;

label3.caption := inttostr(i) + ' Einträge vorhanden';
label1.Caption := s;
label2.caption := path;
finally
stl.free;
end;
 end;

procedure TForm1.Button2Click(Sender: TObject);
var i: integer;
begin
  for i := 0 to Checklistbox1.Items.Count-1 do
  begin
  if Checklistbox1.checked[i] then
  begin
  Checklistbox1.Items.Delete(i);
end;
end;
end;

Luckie 13. Jul 2004 12:31

Re: Senden an
 
Kuck dir deine Schleife doch mal genau an: Was machst du denn da? Nehmen wir mal an du hast 3 Einträge. Deine Schleife wird also dreimal durchlaufen. Jetzt löscht du einen Eintrag und du hast nur noch zwei Einträge. Aber deine Schleife läuft trotzdem noch bis drei. Aber den dritten gibt es ja gar nicht mehr, ergo crasht es. Lösung: Du musst die Schleife runterzählen lassen mit downto.
Delphi-Quellcode:
for i := Listbox1.Items.Count downto 0 do

alcaeus 13. Jul 2004 12:32

Re: Senden an
 
Zitat:

Zitat von Luckie
Delphi-Quellcode:
for i := Listbox1.Items.Count downto 0 do

Fast:
Delphi-Quellcode:
for i := Listbox1.Items.Count-1 downto 0 do
Verwendest du das -1 nicht wird der Code schon wieder crashen.

Greetz
alcaeus

sui 13. Jul 2004 13:32

Re: Senden an
 
Thx, klappt wunderbar, aber die Verknüpfungen sind nicht gelöscht.
Der löscht die nur aus der CheckListbox raus, nicht aber aus dem Ordner.

Luckie 13. Jul 2004 16:01

Re: Senden an
 
@sui: Davkn war auch niergens in deinem Posting die Rede. Desweiteren neues Problem, neuer Thread.

@alcaeus: Eingebauter Ciopy & Paste Schutz. :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:31 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