Hallo Wissende, ich habe 3 Routinen, die ich mir erstellt habe, um Inhalte eines mehrdimensionalen Array anschaulich zu machen und Inhalte zum Teil in einer Listbox anzeigen zu lassen.
Ich poste hier erstmal die 3 Routinen und schildere was mein Problem ist.
Diese erste Routine soll eigentlich die leeren "Zeilen finden" und automatisch befüllte Einträge nach oben verschieben. Also wenn der 2 Eintrag(myData[0,1]) leer ist, dann ab dem 3. Eintrag(myData[0,2]) alles hochschieben...usw. Sie wird aufgerufen, wenn man dem Aray einen neuen Eintrag hinzugefügt hat, oder einen Eintrag gelöscht hat.
Hier scheint sich auch ein Fehler eingeschlichen zu haben, denn wenn ich mitten im Array aus 20 Einträgen die Einträge 4 bis 13 lösche, erhalte ich später in der Ansicht nicht die Einträge 1-3 und 14-20 sondern nur 1-3.
Delphi-Quellcode:
procedure TForm1.SortiereGrid;
var
i, k, last :integer;
begin
last := -1;
for i:= 999 downto 0 do
if myData[0,i] > '' then
begin
Last := i; //letzter Eintrag
break; //geht aus Schleife raus
end;
if last = -1 then exit; //kein Eintrag gefunden - Abbruch
i := Last -1; //letzten Eintrag um einen verringern
while i > 0 do //so lange, wie letzter ET > 0
begin
if myData[0,i] = '' then //wenn leer beginne
begin
Last := Last -1; //ziehe einen ab
for k := i to Last do //schleife von i bis Last
begin
myData[0,i]:=myData[0,i];//Gruppe[i] = Gruppe[i-1]
end;
myData[0,Last+1]:='';
end;
i:=i-1
end;
end;
Diese Procedure schreibt mir den Inhalt des Arrays in eine Listbox, damit ich auch was sehen kann. Funktioniert einwandfrei!
Delphi-Quellcode:
procedure TForm1.WriteList;
var
i:integer;
begin
list_pics.Clear;
for i:=0 to 999 do
begin
if myData[0,i] > '' then list_pics.Items.Add(myData[0,i]); //bildpfad
//ShowMessage(myData[0,i]);
end;
end;
Und mit folgender Routine will ich eigentlich Einträge aus dem Array löschen. Dabei gehe ich davon aus, dass die in die Listbox geschriebenen Einträge selektiert sind.
Delphi-Quellcode:
procedure TForm1.btn_del_fileClick(Sender: TObject);
var
k,n:integer;
begin
for n:=0 to list_pics.Count-1 do
begin
if list_pics.Selected[n]=true then
begin
if chk_confirm_delete.Checked then //löschen soll bestätigt werden
if MessageDlg('Soll das Bild: '+ExtractFileName(list_pics.Items.Strings[n])+' wirklich gelöscht werden?',mtConfirmation,[mbyes,mbno],0) = 6 then
begin
ShowMessage(myData[0,n]+chr(13)+'Zeile:'+inttostr(n));
myData[0,n]:='';
end
else //ohne Löschbestätigung
myData[0,n]:='';
end;
end;
SortiereGrid; //siehe oben
WriteList; //leeren und zurückschreiben in listbox
list_picsClick(sender);
end;
Ich habe schon gesucht und versucht zu debuggen, aber ich weiss einfach nicht wo der Fehler ist....Ich bin mir ziemlich sicher, dass der Fehler in der Routine SortiereGrid sein muss, aber ich kann ihn finden. Wer hilft mir bitte?