Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: ListView Einträge und Objecte löschen

  Alt 17. Jun 2007, 12:21
Hallo marabu u. Sharky,

vorab danke für die Tipps.

@marabu mit dem Auslagern der Aktion in eine TAction habe ich noch nicht ganz verstanden. Muss mir das noch mal genauer in der Hilfe ansehen.

Ich habe nun die beiden Tipps aufgenommen und die Proceduren noch einmal neu geschrieben bzw. geändert.

Vielleicht könnt Ihr noch mal ein kritischer Blick draufwerfen, ob es so nun in Ordnung ist.

Die Einträge werden einzeln gelöscht:
Delphi-Quellcode:
{------------------------------------------------------------------------------}
procedure TFormMSEinrichten.LoeschenBitBtn4Click(Sender: TObject);
begin
  // Aus der Liste einen Eintrag löschen.
  if MSAnzeigenListView.Selected <> NIL then
  begin
    // Löschen des angehängten Objectes und den Listen-Eintrag.
// TMSV1(MSAnzeigenListView.Selected.Data).Free; // Object Löschen
// MSAnzeigenListView.Selected.Data:= NIL; // Zeiger in der List löschen
    MSAnzeigenListView.Selected.Delete; // Listeneintrag löschen
  end;
end;
{------------------------------------------------------------------------------}
Das Formular wird geschlossen.

Delphi-Quellcode:
procedure TFormMSEinrichten.FormDestroy(Sender: TObject);
var i: integer;
begin
  // Speicher aufräumen
  for i := MSAnzeigenListView.Items.Count-1 downto 0 do
  begin
// TMSV1(MSAnzeigenListView.items[i].Data).free; // Alle Objecte löschen
// MSAnzeigenListView.items[i].Data:= NIL; // Zeiger der Liste Löschen
    MSAnzeigenListView.items[i].Delete; // Einträge Löschen.
  end;
end;
Hier wird nun das Object gelöscht und der Speicher wieder freigeben.

Delphi-Quellcode:
{-------------------------------------------------------------------------------
Procedure: TFormMSEinrichten.MSAnzeigenListViewDeletion(Sender: TObject;
Function:  Die Procedure wird von Delete angesprungen, kurz bevor der Eintrag
          aus der Liste gelöscht wird.
          Hier wird geprüft ob das Object auf NIL zeigt, ist das nicht der Fall
          so wird das Object gelöscht und der Speicher wieder freigeben.
          Anschliessend wird der Zeiger gelöscht.
Parameter: Item  //Ist der Eintrag der gerade gelöscht werden soll.
letz.Änd.: 17.06.2007
-------------------------------------------------------------------------------}

procedure TFormMSEinrichten.MSAnzeigenListViewDeletion(Sender: TObject;
  Item: TListItem);
begin
  If Assigned(Item.Data) then // Prüfen ob das Objcet <> NIL ist
  begin
    TMSV1(Item.Data).Free; // Object löschen u. Speicher wieder freigeben
    Item.Data:= NIL; // Zeiger löschen
  end;
end;
{------------------------------------------------------------------------------}
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat