Einzelnen Beitrag anzeigen

absentsilence

Registriert seit: 1. Feb 2004
10 Beiträge
 
#12

Re: CD-Datenbank - Array, aus dem man löschen kann..

  Alt 2. Feb 2004, 17:09
So, das Programm compilert erstmal - schonmal nicht schlecht. Wenn ich einen Eintrag hinzufüge, und zwar so:

Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
var jahr, monat, tag, std, min, sec, msec:word;
jahrstr, monatstr, tagstr, stdstr, minstr, secstr:string;
begin
setlength(daten,500);
i:=i+1;
daten[i].CDname.interpret:=interpret_edit.Text;
daten[i].CDname.album:=album_edit.Text;
daten[i].genre:=genre_combobox.Text;
daten[i].jahr:=jahr_spinedit.Value;
daten[i].preis:=strtofloat(preis_edit.text);
cd_listbox.Items.Add(daten[i].CDname.interpret+#9+daten[i].CDname.album+
#9+daten[i].genre+#9+inttostr(daten[i].jahr)+#9+floattostrf(daten[i].preis,fffixed,8,2));
eintrag_hinzufuegen(daten[i]);
anzahl_edit.text:=IntTostr(cd_listbox.Items.Count);
DecodeTime(Time,std,min,sec,msec);
stdstr := IntToStr(std);
if length(stdstr)<2 then stdstr := '0'+stdstr;
minstr := IntToStr(min);
if length(minstr)<2 then minstr := '0'+minstr;
secstr := IntToStr(sec);
if length(secstr)<2 then secstr := '0'+secstr;
uhr_edit.Text:=(stdstr+':'+minstr+':'+secstr);
DecodeDate(Date,jahr,monat,tag);
jahrstr := IntToStr(Jahr);
Case length(jahrstr) of
1:jahrstr := '000'+jahrstr;
2:jahrstr := '00'+jahrstr;
3:jahrstr := '0'+jahrstr;
end;
monatstr := IntToStr(monat);
if length(monatstr) < 2 then monatstr := '0' + monatstr;
tagstr := IntToStr(tag);
if length(tagstr) < 2 then tagstr := '0' + tagstr;
datum_edit.text:=(tagstr+'.'+monatstr+'.'+jahrstr);
end;
...dann steht der Eintrag in der Listbox. Wenn ich diesen aber löschen will:

Delphi-Quellcode:
procedure TForm1.lschen1Click(Sender: TObject);
begin
cd_Listbox.Items.Delete(cd_Listbox.ItemIndex);
eintrag_loeschen(cd_Listbox.ItemIndex);
end;
Delphi-Quellcode:
procedure eintrag_loeschen(Index : Integer);
var i:Integer;
begin
if (Index >= 0) and (Index < Length(daten))
then begin
for i:=Index+1 to High(daten) do
daten[i-1]:=daten[i]; // umkopieren
SetLength(daten,Length(daten)-1); // anschließend Array verkleinern - fertig.
end
else
raise Exception.Create('Ungültiger Index!'#13#10+
                                  'Minimum = 0'#13#10+
                                  'Maximum = '+InTtoStr(High(daten))+#13#10+
                                  'Fehlerhafter Wert = '+IntToStr(Index)+' !');
end;
dann kommt dieser Fehler:
"Im Projekt...ist eine Exception der Klasse Exception aufgetreten. Meldung: Ungültiger Index. Minimum=0 Maximum=5 Fehlerhafter Wert=-1 Prozess wurde angehalten"

Was kann man da machen?

Danke für deine Geduld mit mir... ich hoffe, ich hab's bis heute Abend kapiert...
  Mit Zitat antworten Zitat