![]() |
Wie Objekte in ObjectList identifizieren?
Hallo Gemeinde!
Folgendes konzeptuelle Problem plagt mich: In meinem Programm erzeugt der User durch einen Maus-Klick Buttons (TSpeedButton) durch:
Delphi-Quellcode:
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.
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 ... 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:
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?
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 ... 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 |
AW: Wie Objekte in ObjectList identifizieren?
Statt TObject(Sender).Free
TObject(Sender) an eine Routine übergeben die das Objekt aus der Liste entfernt (langt bei FOb.OwnsObjects := true) ansonsten hinterher freigeben. |
AW: Wie Objekte in ObjectList identifizieren?
Zitat:
Ich glaube, das habe ich nicht verstanden: "...an eine Routine übergeben die das Objekt aus der Liste entfernt" Und woher weiss diese Routine, welches Objekt aus der Liste zu löschen ist? Ich dachte das sei ja mein Problem?! Woher soll diese Routine es wissen, wenn ich es doch auch nicht weiß? Grübelnd Jazzman |
AW: Wie Objekte in ObjectList identifizieren?
was ergibt
Delphi-Quellcode:
.
ObjektList.Items.IndexOf(Sender)
|
AW: Wie Objekte in ObjectList identifizieren?
Es soll ja ungemein bildend sein, die Hilfe zu Rate zu ziehen.
Dann findet man auch so tolle Sachen wie IndexOf und Delete Möglich ist aber auch
Delphi-Quellcode:
theList.Remove( Sender );
Sender.Free; |
AW: Wie Objekte in ObjectList identifizieren?
Zitat:
Jetzt habe ich es auch verstanden! Vielen Dank -- ich hab da echt gepennt! Gruß Jazzman |
AW: Wie Objekte in ObjectList identifizieren?
@Sir Rufo
wobei
Delphi-Quellcode:
wenn er die Standarddeinstellungen der Objektlist nicht verändert hat das nächste Problem für Ihn wird.
Sender.Free;
|
AW: Wie Objekte in ObjectList identifizieren?
Zitat:
Jo, wenn es sicher sein soll, dann mit Extract und dann Free, oder doch mit Remove und nur wenn not OwnsObjects, dann Free Wenn du wüsstest, wo ich mich gerade befinde, würdest du dich darüber auch nicht wundern :mrgreen: |
AW: Wie Objekte in ObjectList identifizieren?
Zitat:
neugierig machen gilt nicht :stupid: [/OT] |
AW: Wie Objekte in ObjectList identifizieren?
Zitat:
Gruß Jazzman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz