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.