AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Objekte in ObjectList identifizieren?

Ein Thema von Jazzman_Marburg · begonnen am 2. Dez 2010 · letzter Beitrag vom 3. Dez 2010
Antwort Antwort
Seite 1 von 3  1 23      
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
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 20:55
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.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)

Geändert von Bummi ( 2. Dez 2010 um 21:03 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:09
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.

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
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Satty67

Registriert seit: 24. Feb 2007
Ort: Baden
1.566 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:12
was ergibt
ObjektList.Items.IndexOf(Sender) .
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:15
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;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:21
was ergibt
ObjektList.Items.IndexOf(Sender) .
Schon gut, schon gut!
Jetzt habe ich es auch verstanden!

Vielen Dank -- ich hab da echt gepennt!

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#7

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:22
@Sir Rufo

wobei
Sender.Free; wenn er die Standarddeinstellungen der Objektlist nicht verändert hat das nächste Problem für Ihn wird.
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:28
@Sir Rufo

wobei
Sender.Free; wenn er die Standarddeinstellungen der Objektlist nicht verändert hat das nächste Problem für Ihn wird.
Wo ich es geschrieben hatte, kam mir auch der Gedanke, ob Remove nun bei OwnsObjects das Object nicht auch gleich ins Nirwana befördert.
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#9

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:42
Zitat:
Wenn du wüsstest, wo ich mich gerade befinde, würdest du dich darüber auch nicht wundern
[OT]
neugierig machen gilt nicht
[/OT]
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Jazzman_Marburg
Jazzman_Marburg

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

AW: Wie Objekte in ObjectList identifizieren?

  Alt 2. Dez 2010, 21:47
@Sir Rufo

wobei
Sender.Free; wenn er die Standarddeinstellungen der Objektlist nicht verändert hat das nächste Problem für Ihn wird.
Ganz bestimmt wird es für ihn ein Problem -- aber da lassen wir ihn erstmal reinlaufen...

Gruß
Jazzman
--- Delphi XE Starter, Windows 8 ---
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz