Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Problem mit create bei eigener Klasse (https://www.delphipraxis.net/133981-problem-mit-create-bei-eigener-klasse.html)

SimStar001 13. Mai 2009 09:51


Problem mit create bei eigener Klasse
 
Hallo, her mal der Code der Eigenen Klasse:

Delphi-Quellcode:
unit Livetrack;

interface

uses IdFTP, IdHTTP;

type TFTP = class(TIDFTP)
    end;

type THTTP = class(TIDHTTP)
    end;

type TLivetrack = class(TObject)
      private
      {private Vars}
      FHTTP : THTTP;
      FFTP : TFTP;
      FCacheDirectory : string;
      FFTPHost : String;
      FFTPDirectory : String;
      FFTPLoginName : String;
      FFTPPassword : String;
      FHTTPUrl : String;
      FFileName : String;
      FVID : String;

      {Set Procedures}
      procedure SetCacheDirectory(Directory : String);
      procedure SetFTPHost(Host : String);
      procedure SetFTPDirectory(Directory : String);
      procedure SetFTPLoginName(LoginName : String);
      procedure SetFTPPassword(Password : String);
      procedure SetHTTPUrl(URL : String);
      procedure SetFileName(FileName : String);
      procedure SetVID(VID : String);

      {get Functions}
      function GetCacheDirectory : String;
      function GetFTPHost : String;
      function GetFTPDirectory : String;
      function GetFTPLoginName : String;
      function GetFTPPassword : String;
      function GetHTTPUrl : String;
      function GetFileName : String;
      function GetVID : String;

      public
      {Functions}
      constructor create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string); overload;
      constructor create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String); overload;
      destructor free ;

      {properties}
      property CacheDirectory : String read GetCacheDirectory write SetCacheDirectory;
      property FTPHost : String read GetFTPHost write SetFTPHost;
      property FTPDirectory : String read GetFTPDirectory write SetFTPDirectory;
      property FTPLoginName : String read GetFTPLoginName write SetFTPLoginName;
      property FTPPassword : String read GetFTPPassword write SetFTPPassword;
      property HTTPUrl : String read GetHTTPUrl write SetHTTPUrl;
      property FileName : String read GetFileName write SetFileName;
      property VID : String read GetVID write SetVID;
      end;

implementation

{Set Procedures}

procedure TLivetrack.SetCacheDirectory(Directory : String);
begin

end;

procedure TLivetrack.SetFTPHost(Host : String);
begin

end;

procedure TLivetrack.SetFTPDirectory(Directory : String);
begin

end;

procedure TLivetrack.SetFTPLoginName(LoginName : String);
begin

end;

procedure TLivetrack.SetFTPPassword(Password : String);
begin

end;

procedure TLivetrack.SetHTTPUrl(URL : String);
begin

end;

procedure TLivetrack.SetFileName(FileName : String);
begin

end;

procedure TLivetrack.SetVID(VID : String);
begin

end;
// Ende Set Procedures

////////////////////////////////////////////////////////////////////////////////


{Get Functions}

function TLivetrack.GetCacheDirectory : String;
begin

end;

function TLivetrack.GetFTPHost : String;
begin

end;

function TLivetrack.GetFTPDirectory : String;
begin

end;

function TLivetrack.GetFTPLoginName : String;
begin

end;

function TLivetrack.GetFTPPassword : String;
begin

end;

function TLivetrack.GetHTTPUrl : String;
begin

end;

function TLivetrack.GetFileName : String;
begin

end;

function TLivetrack.GetVID : String;
begin

end;
// Ende Get Functions

////////////////////////////////////////////////////////////////////////////////


{Constructor}

constructor TLivetrack.create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String);
begin
  inherited create;

  self.FFTP := TFTP.Create();
end;

constructor TLivetrack.create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string);
begin

end;
// Ende Constructor

////////////////////////////////////////////////////////////////////////////////


{Destructor}

destructor TLivetrack.free;
begin

end;
// Ende Destructor

////////////////////////////////////////////////////////////////////////////////

end.

Ich habe jetzt folgendes Problem:

Wenn ich beim Constructor von TLivetrack einen IDFTP erzeugen will, muss man ja TComponent des Besitzers angeben. Wie mache ich das? Er gehört ja zum Object Livetrack...

BAMatze 13. Mai 2009 09:55

Re: Problem mit create bei eigener Klasse
 
Hatte vor kurzem ein ähnliches Problem. Ich führe das create meiner Komponenten, was ja auch auf TComponent ausgeführt werden muss, auf nil aus und setze den Parent auf Self. Damit funktioniert es bei mir ganz gut. Weiß nur nicht, ob dies mit deinem Problem auch geht, da ich sowas wie TLabel, TEdit und so verwende. Wichtig ist das setzen des Parent bei mir, sonst siehst man nichts. Hoffe das hilft dir weiter.

BAMatze

shmia 13. Mai 2009 09:57

Re: Problem mit create bei eigener Klasse
 
Du übergibst nil als Owner:
Delphi-Quellcode:
self.FFTP := TFTP.Create(nil);
und stellst im Destruktor sicher, dass das eingebettete Objekt FFTP auch wieder freigeben wird.
Dein Destruktor darf nicht Free heisen, sondern Destroy.
Ganz wichtig ist auch die Angabe von Override.
Delphi-Quellcode:
destructor Destroy;override; // Standard deklaration des Destruktors
Delphi-Quellcode:
destructor TLivetrack.Destroy;
begin
   FFTP.Free;
   // Ganz wichtig !!! inherited muss der letzte Befehl im Destruktor sein
   inherited;
end;

mkinzler 13. Mai 2009 09:57

Re: Problem mit create bei eigener Klasse
 
Man kann auch keinen angeben (Nil)

SimStar001 13. Mai 2009 09:58

Re: Problem mit create bei eigener Klasse
 
Also ich habe auch einfach mal "nil" als TComponent eingegeben.

Muss ich den Parameter Parent dann noch unbedingt auf "Self" setzen oder nicht?

mkinzler 13. Mai 2009 09:59

Re: Problem mit create bei eigener Klasse
 
Nein, sollte uach auf Nil gesetzt werden (Self ist auf jeden Fall nicht möglich)

SimStar001 13. Mai 2009 10:01

Re: Problem mit create bei eigener Klasse
 
Alles klar, vielen Dank,

habe den Destructor geändert und es so gemacht:

Delphi-Quellcode:
constructor TLivetrack.create(const CacheDirectory : String; const FTPHost : string; const FTPDirectory : string; const FTPLoginName : string; const FTPPassword : string; const HTTPUrl : String; const FileName : String; const VID : string);
begin
  inherited create;

  self.FFTP := TFTP.Create(nil);
  self.FHTTP := THTTP.Create(nil);

  // Setzen der Parameter für HTTP und FTP
 
end;
// Ende Constructor

////////////////////////////////////////////////////////////////////////////////


{Destructor}

destructor TLivetrack.destroy;
begin
  self.FFTP.Free;
  self.FHTTP.free;

  inherited free;
end;
// Ende Destructor
Somit sollte es beim freigeben keine Probleme geben oder?

shmia 13. Mai 2009 10:04

Re: Problem mit create bei eigener Klasse
 
Delphi-Quellcode:
destructor TLivetrack.destroy;
begin
  self.FFTP.Free;
  self.FHTTP.free;

//inherited free; // Falsch
  inherited; // Richtig
end;

SimStar001 13. Mai 2009 10:06

Re: Problem mit create bei eigener Klasse
 
Sorry, stimmt...

Reicht hier nur
Delphi-Quellcode:
inherited
, weil ich meine mal z.B. im Delphi Crashkurs gelesen zu haben
Delphi-Quellcode:
inherited destroy
...

oder ist das im Prinzip dasselbe?


LG Marco!

sirius 13. Mai 2009 10:07

Re: Problem mit create bei eigener Klasse
 
Zitat:

Zitat von SimStar001
Somit sollte es beim freigeben keine Probleme geben oder?

Solange du das Override nicht vergessen hast...


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:03 Uhr.
Seite 1 von 2  1 2      

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