AGB  ·  Datenschutz  ·  Impressum  







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

TObjectList Object soll sich selbst löschen

Ein Thema von Culxxaw · begonnen am 19. Okt 2010 · letzter Beitrag vom 20. Okt 2010
Antwort Antwort
Culxxaw

Registriert seit: 21. Okt 2008
40 Beiträge
 
#1

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 19:47
Okay vielen Dank an alle! Habs mit Hilfe von Postmessage und dem Link von shmia gemacht und jetzt klappts wunderbar.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#2

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 20:47
Zitat:
Säge nicht an dem Ast auf dem du gerade sitzt!
Prinzipiell trifft das zu, aber

OnClick wird von Delphi-Referenz durchsuchenApplication, bzw. von der Message-Loop darin aufgerufen.
Nach dem Ausführen von OnClick wird nicht nochmal auf den Sender zugegriffen.

Darum "kann" man, in diesem Fall, den Sender auch löschen,
da man quasi auf einem anderem Ast sitzt.

Zitat:
Reicht es denn, wenn ich z.b. TButton ableite und im Destructor den Button aus der Objektliste entferne?
sollte reichen
Zitat:
Denn eigentlich weiß der Button doch immer noch nicht, dass die Objektliste existiert...
Darum mußt du ja dem Button diese Liste vorher mitteilen und er merkt sie sich bis dahin.

Oder es gibt nur eine "globale" Liste, wo er sich dann rauslöscht.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Okt 2010 um 20:51 Uhr)
  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
 
#3

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 21:51
Zitat:
Säge nicht an dem Ast auf dem du gerade sitzt!
Prinzipiell trifft das zu, aber

OnClick wird von Delphi-Referenz durchsuchenApplication, bzw. von der Message-Loop darin aufgerufen.
Nach dem Ausführen von OnClick wird nicht nochmal auf den Sender zugegriffen.

Darum "kann" man, in diesem Fall, den Sender auch löschen,
da man quasi auf einem anderem Ast sitzt.
Ich glaube du hast dann ein anderes Delphi als ich.
Bei mir sieht das so aus:

Zitat von Controls.pas:
Delphi-Quellcode:
procedure TControl.WMLButtonUp(var Message: TWMLButtonUp); // Hier wird die Nachricht verarbeitet und Click aufgerufen

procedure TControl.Click; // und hier macht es klick
Irgendwie fehlt mir das Application da (gut das ist immer irgendwo) aber für mich erfolgt der Aufruf aus der Instanz vom Button aufgerufen.
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 stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 22:12
Nachfolgendes Projekt macht bei mir keine Probleme.
Wichtig ist wohl nur, ob der Komponentencode nochmal auf "Self" zugreift.
Wenn nicht, gibt es keine Probleme.


Delphi-Quellcode:
unit fFreeTest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    Button8: TButton;
    Button9: TButton;
    Button10: TButton;
    procedure ButtonClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.ButtonClick(Sender: TObject);
begin
  FreeAndNil(Sender);
end;

end.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#5

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 23:16
Nachfolgendes Projekt macht bei mir keine Probleme.
Wenn nicht, gibt es keine Probleme.
Auch wenn FreeAndNil unnötig ist, da der Parameter Sender eh nicht wiederverwendet, bzw. nachfolgen genutzt wird. (.Free würde reichen, aber schlimm isses nicht)

Wichtig ist wohl nur, ob der Komponentencode nochmal auf "Self" zugreift.
Self ist in diesem Fall die Form.

PS: In Ereignisprozedur wie OnClose die Form freizugeben ist da schon schwerer.

Zitat:
Irgendwie fehlt mir das Application da (gut das ist immer irgendwo)
Application.Run; (siehe .dpr), bzw. genauer die TApplication.ProcessMessage behandelt die Window-Messages, und von dort aus wird letztendlich dein procedure WMLButtonUp(var Message: TWMLButtonUp); message WM_LBUTTONUP; aufgerufen.




Wie gesagt, einen Button in seinem OnClick freizugeben ist kein Problem.
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (19. Okt 2010 um 23:25 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.352 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TObjectList Object soll sich selbst löschen

  Alt 19. Okt 2010, 23:30
FreeAndNil habe ich zum Testen genutzt, damit auch der Pointer auf nil gesetzt wird (ist ja "extremer" beim Fehlertest).

Zugriff auf "Self" bezog ich auf den Code innerhalb des TButton (der Code, der noch nach dem Aufruf der Ereignisbehandlung folgt, also MINDESTENS "end;").

Zitat:
Wie gesagt, einen Button in seinem OnClick freizugeben ist kein Problem.
Es sei denn, eine Komponente würde in ihrer Methode Click nach dem Aufruf einer zugewiesenen Ereignisbehandlung noch einmal auf ihre Daten zugreifen:
Delphi-Quellcode:
procedure TTestControl.Click;
begin
  if Assigned(FOnClick) then
    FOnClick(Self)
  Caption := 'ERROR if Self = nil'
end;
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.326 Beiträge
 
Delphi 12 Athens
 
#7

AW: TObjectList Object soll sich selbst löschen

  Alt 20. Okt 2010, 07:39
Was aber bei einem TButton nicht der Fall ist.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:27 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 by Thomas Breitkreuz