Hallo Gemeinde!
Folgendes konzeptuelle Problem plagt mich:
In meinem Programm erzeugt der User durch einen Maus-Klick Buttons (TSpeedButton) durch:
Delphi-Quellcode:
PROCEDURE TMyClass.MouseUp(Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
BEGIN
FObjContainer.ADD(TSpeedbutton.CREATE( Self )); // Button im Objekt-Container
FAnzObj := FObjContainer.Count;
WITH TSpeedbutton(FObjContainer.Items[FAnzObj-1]) DO // Durch FAnzObj Zugriff auf das eben erzeugte Objekt
...
D.h. es wird ein SpeedButton erzeugt und zum Objekt-Container (TObjectList) hinzugefügt. Auf dieses gerade erzeugte Objekt kann ich dann mit der oben gezeigten WITH Anweisung schön zugreifen.
Nun aber das Problem: Wenn der User die rechte Maus-Taste betätigt, soll das Objekt, auf welchem sich Maus befindet, gelöscht werden:
Delphi-Quellcode:
PROCEDURE TMyClass.BtnMouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
BEGIN
IF Button = mbRight THEN
BEGIN
( SENDER AS TSpeedButton ).FREE; // Der Button, der dieses Ereignis ausgelöst hat, wird gelöscht
...
Nun möchte ich aber das betreffende Objekt auch
aus dem Objekt-Container löschen -- nur welches bzw. es existiert ja doch garnicht mehr, oder?
Die oben gezeigte Methode das Objekt mittels
FREE loszuwerden ist ja auch nur ein Umweg: stattdessen sollte das Löschen ja direkt im Objekt-Container geschehen -- da ich aber nicht weiß wie ich dieses Objekt auf welchem die Maus sitzt identifizieren kann, habe ich es so gemacht -- dabei geht mir gerade durch den Kopf:
Habe ich dadurch im Objekt-Container ein Zombie-Button erzeugt? Ich meine ich habe ja das Objekt mit
( SENDER AS TSpeedButton ).FREE; gelöscht -- aber im Objekt-Container existiert es ja noch, irgendwie...
Vielleicht kann ja jemand mal Licht in diese gruselige Geschichte bringen?
Vielen Dank & Gruß
Jazzman