AGB  ·  Datenschutz  ·  Impressum  







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

Komponeten zerstören

Ein Thema von LoL · begonnen am 1. Okt 2003 · letzter Beitrag vom 2. Okt 2003
Antwort Antwort
Seite 3 von 4     123 4      
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#21

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:24
@LoL

ich möchte hier nicht den Experten vorgreifen, aber ich glaube es eher weniger.
MfG

  Mit Zitat antworten Zitat
Dagon

Registriert seit: 13. Jul 2003
505 Beiträge
 
Delphi 7 Professional
 
#22

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:27
@ Christian Seehase: Ich mich
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#23

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:31
Moin Christoph,

Zitat von LoL:
also kann man nicht eine prozedur schreiben die jede art von komponeten zerstört und frei gibt?
Die gibt es schon. Die heisst FreeAndNil.

[EDIT]
Zitat von the_master:
@ Christian Seehase: Ich mich
Warum das denn? Man kann ja nicht immer an alles denken.
[/EDIT]
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
LoL
(Gast)

n/a Beiträge
 
#24

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:34
freeandnil macht das:
Delphi-Quellcode:
procedure FreeAndNil(var Obj);
var
  Temp: TObject;
begin
  Temp := TObject(Obj);
  Pointer(Obj) := nil;
  Temp.Free;
end
hab ich probiert geht aber irgendwie nicht. die abfrage gibt immer noch false zurück
  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#25

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:50
ich nehm an, FreeAndNil benötigt in seiner Parameterliste aber immer eine Instanz deren Typ ursprünglich ist und nicht eine deren Typ durch eine Übergabe via Parameterliste erst noch quasi 'falsch' ge-typcastet wurde.
MfG

  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#26

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:53
Also: Ich nehm an, Beispielpanel ist vom Typ TPanel.
Dann sollte folgender Aufruf funktionieren:
destroy_components(TComponent(Beispielpanel));
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#27

Re: Komponeten zerstören

  Alt 1. Okt 2003, 22:57
nein eigentlich gerade nicht. Ich formuliere dann, dass das Teil vom Typ TComponent wäre, FreeAndNil muss aber den Destructor von TPanel aufrufen. Ich weiß nicht ob die Routine das dann trotzdem noch so ohne weiteres kann.
MfG

  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#28

Re: Komponeten zerstören

  Alt 1. Okt 2003, 23:06
No prob. Das ist ja das schöne von Klassen: Eine Objektvariable ist ja nur ein Zeiger auf das Objekt. Durch den Cast des Panels in TComponent kann man zwar nur noch auf die Eigenschaften und Methoden von TComponent zugreifen, der Inhalt bleibt aber der gleiche. Es wird weiterhin der Destruktur von TPanel aufgerufen.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
ArrayOf..

Registriert seit: 7. Sep 2003
50 Beiträge
 
Delphi 7 Personal
 
#29

Re: Komponeten zerstören

  Alt 1. Okt 2003, 23:29
Bist du sicher, also dass nach einem falschen Typcasting per Übergabe via Parameterliste immer noch der korrekte Destructor aufgerufen wird? Wo doch die typisierte Instanz-Variable auch sonst immer den Typ des gepointeten quasi entscheident bestimmt. Du sagst ja selbst, dass man dann nur noch auf die Eigenschaften und Methoden von TComponent zugreifen kann. Der Destructor ist aber prinzipiell auch nur eine dieser Methoden. Also ich glaub's eher nicht so richtig... Aber ich muss auch zugeben, 1000% weiß ich es hier auch nicht *g*.


edit: Und meines Wissens sind solche Destructoren auch nicht so eine Abart von diesen virtuellen Methoden, die ja irgendwie so eine ähnliche Fähigkeit besitzen.
MfG

  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#30

Re: Komponeten zerstören

  Alt 2. Okt 2003, 00:01
Du castest ja nur den Pointer, nicht den Inhalt! Welche Methode aufgerufen wird, bestimmt der Typ zur Laufzeit, nicht der im Quelltext angegebene!

Probiers mal selber aus:
Delphi-Quellcode:
type
  TMyObject = class
  public
    destructor Destroy; override;
  end;

destructor TMyObject.Destroy;
begin
  ShowMessage('Ich werde ausgeführt');
end;

var
  Obj: TObject;
begin
  Obj := TMyObject.Create;
  Obj.Free;
end;
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 16:01 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