Einzelnen Beitrag anzeigen

MaToBe

Registriert seit: 2. Aug 2008
162 Beiträge
 
#1

Löschen einer Zeile mit anschließendem Aufrücken

  Alt 17. Nov 2008, 18:11
Hallo liebe DPler,

Dies ist mein Code:
Delphi-Quellcode:
//Bilder laden
procedure TForm1.btnBildLadenClick(Sender: TObject);
begin
  if openPictureD.Execute then
  begin
    imgBild.Picture.LoadFromFile(openPictureD.FileName);
    sgDaten.Cells[0,clbBilder.Count] := inttostr(clbBilder.Count);
    sgDaten.Cells[1,clbBilder.Count] := ExtractFileName(openPictureD.FileName);
    sgDaten.Cells[2,clbBilder.Count] := ExtractFilePath(openPictureD.FileName) + ExtractFileName(openPictureD.FileName);
    clbBilder.Items.Add(ExtractFileName(openPictureD.FileName));
    lbBildName.Caption := ExtractFileName(openPictureD.FileName);
    lbBildpfad.Caption := ExtractFilePath(openPictureD.FileName) + ExtractFileName(openPictureD.FileName);
  end;
end;

//Bilder löschen
procedure TForm1.btnBildloeschenClick(Sender: TObject);
var ClickIndex : integer;
begin
    ClickIndex := clbBilder.ItemIndex;
    imgBild.Free;
    lbBildName.Caption := '';
    lbBildPfad.Caption := '';

    sgDaten.Rows[ClickIndex].Clear;
    for I := ClickIndex to sgDaten.RowCount-1 do
    begin
        sgDaten.Rows[i] := sgDaten.Rows[i+1];
    end;

    clbBilder.Items.Delete(ClickIndex);
end;

//Bilder anzeigen
procedure TForm1.clbBilderClick(Sender: TObject);
var ClickIndex : integer;
    BildPfad : string;
    BildName : string;
begin
    ClickIndex := clbBilder.ItemIndex;
    BildPfad := sgDaten.Cells[2,ClickIndex];
    BildName := sgDaten.Cells[1,ClickIndex];

    imgBild.Picture.LoadFromFile(BildPfad);
    lbBildName.Caption := BildName;
    lbBildpfad.Caption := BildPfad;
end;
Und dies ist mein Problem:
Ich habe eine CheckListBox, in der alle geladenen Bilder mit Namen stehen. Zusetzlich wird der Name des Bildes in einem StringGrit in der 2. Spalte und der Pfad in der 3. Spalte gespeichert. Klickt man nun auf einen Namen in der CheckListBox taucht das Bild auf. All das klappt gut.

Wenn ich ein Bild aus dem Verzeichnis löschen will, wird die ganze Zeile aus dem StingGrit gelöscht. Desweiteren werden alle nachfolgenden Zeileninhalte um eins nach oben gesetzt, so dass keine Lücke entsteht. Außerdem wird der Eintrag in der CheckListBox gelöscht. Leider taucht nun, wenn ich jetzt wieder ein Bild in der CheckListBox markiere um es anzuzeigen, ein Fehler auf: "Exception-Klasse EAccessViolation mit Meldung 'Zugriffsverletzung bei Adresse 004AF7F7 in Modul".

Ich hoffe das mir jemand erklären kann, wo der Fehler liegt und was ich da falsch gedacht habe.

Vielen Dank schonmal für eure Hilfe auch bei meinen anderen Fragen
  Mit Zitat antworten Zitat