AGB  ·  Datenschutz  ·  Impressum  







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

Problem mit create bei eigener Klasse

Ein Thema von SimStar001 · begonnen am 13. Mai 2009 · letzter Beitrag vom 13. Mai 2009
Antwort Antwort
Seite 1 von 2  1 2      
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#1

Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:51
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...
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:55
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
2. Account Sero
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:57
Du übergibst nil als Owner:
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.
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;
Andreas
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:57
Man kann auch keinen angeben (Nil)
Markus Kinzler
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#5

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:58
Also ich habe auch einfach mal "nil" als TComponent eingegeben.

Muss ich den Parameter Parent dann noch unbedingt auf "Self" setzen oder nicht?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 10:59
Nein, sollte uach auf Nil gesetzt werden (Self ist auf jeden Fall nicht möglich)
Markus Kinzler
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#7

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 11:01
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?
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#8

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 11:04
Delphi-Quellcode:
destructor TLivetrack.destroy;
begin
  self.FFTP.Free;
  self.FHTTP.free;

//inherited free; // Falsch
  inherited; // Richtig
end;
Andreas
  Mit Zitat antworten Zitat
SimStar001

Registriert seit: 18. Jan 2008
594 Beiträge
 
#9

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 11:06
Sorry, stimmt...

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

oder ist das im Prinzip dasselbe?


LG Marco!
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#10

Re: Problem mit create bei eigener Klasse

  Alt 13. Mai 2009, 11:07
Zitat von SimStar001:
Somit sollte es beim freigeben keine Probleme geben oder?
Solange du das Override nicht vergessen hast...
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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