Einzelnen Beitrag anzeigen

Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

Registriert seit: 2. Aug 2004
359 Beiträge
 
#1

Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 20:45
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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat