Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Komponeten zerstören (https://www.delphipraxis.net/9688-komponeten-zerstoeren.html)

ArrayOf.. 1. Okt 2003 20:46

Re: Komponeten zerstören
 
Du destroyst die Componente zwar, aber du NIL'st nur die temporäre Variable 'Compo' dieser Procedure 'Destroy_component'. Die TComboBox-Instanz die du beim Aufruf dieser Procedure in der Parameterliste mitgegeben hast wird zwar so auch freigegeben aber eben nicht geNILt, weil es zwei unterschiedliche Ptr-Variablen sind.

Der Ptr in deiner Procedure-Parameterliste übernimmt den Ptr-Wert auf die zu löschende CompoBox, wodurch deren Speicher dann freigegeben wird. Anschließend wird aber nur dein Ptr in der Procedure geNILt und eben nicht der 'draußen'.

Versuche mal in deinem Procedurekopf diese 'Compo'-Variable als 'var' zu declarieren:

procedure Destroy_Component(var Compo : TComponent);

LoL 1. Okt 2003 20:53

Re: Komponeten zerstören
 
ok so weit so gut aber wenn ich das so ändere und compilieren will dann erhalte ich folgende fehlermeldung:
Zitat:

Types of actual and formal var parameters must be identical
Delphi-Quellcode:
procedure Destroy_Component(var Compo : TComponent);
begin
  if Compo <> nil then
    begin
      Compo.Destroy;
      Compo := nil;
      Compo.Free;
    end;
end;

//beim panel zerstören:
Destroy_Component(beispielpanel);
zu deutsch

Bei einem Variablenparameter muß das eigentliche Argument genau denselben Typ wie der formale Parameter aufweisen.

was mache ich falsch

Christian Seehase 1. Okt 2003 20:59

Re: Komponeten zerstören
 
Moin Christoph,

nimm TObject und nicht TComponent.
TObject ist der Vorfahr für alle.

LoL 1. Okt 2003 21:05

Re: Komponeten zerstören
 
Zitat:

Zitat von Christian Seehase
nimm TObject und nicht TComponent.
TObject ist der Vorfahr für alle.

das gleiche....
mit TPanel gehts auch net

Christian Seehase 1. Okt 2003 21:09

Re: Komponeten zerstören
 
Moin Christoph,

probier's mal so:

Delphi-Quellcode:
procedure Destroy_Component(Compo : TObject);
begin
  if Compo <> nil then
    begin
      Compo.Free;
      Compo := nil;
    end;
end;

Dagon 1. Okt 2003 21:12

Re: Komponeten zerstören
 
Ist das nicht das selbe wie

Delphi-Quellcode:
procedure Destroy_Component(Compo : TObject);
begin
  if Compo <> nil then
    begin
      FreeAndNil(Compo);
    end;
end;
:?:

LoL 1. Okt 2003 21:16

Re: Komponeten zerstören
 
der akzeptiert ja scho nicht mal die übergabe parameter

ArrayOf.. 1. Okt 2003 21:19

Re: Komponeten zerstören
 
Ne, ich weiß nicht ob das überhaupt geht. Du musst ja nachher auch den entsprechend zu deinem Objekt korrekt passenden klassenrefferenzierten Destructor aufrufen und das wird in dieser Destroy-Routine wahrscheinlich nicht so einfach möglich sein, wenn überhaupt, imo.

LoL 1. Okt 2003 21:21

Re: Komponeten zerstören
 
also kann man nicht eine prozedur schreiben die jede art von komponeten zerstört und frei gibt?

Christian Seehase 1. Okt 2003 21:23

Re: Komponeten zerstören
 
Moin The Master,

Du hast doch die Pro Version.
Schau Dir mal in den Sourcen an wie FreeAndNil implementiert ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 Uhr.
Seite 2 von 4     12 34      

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