AGB  ·  Datenschutz  ·  Impressum  







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

eigene Klasse; Constructor inkl. TImage

Ein Thema von Deinhaus · begonnen am 22. Jun 2010 · letzter Beitrag vom 23. Jun 2010
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#1

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 10:10
Und als Owner für das TImage würde ich nicht AParent angeben, sondern entweder self oder nil. Im letzteren Fall muss man das TImage dann aber im Destruktor händisch freigeben.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#2

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 13:20
Also ungefär so !?

Klasse TEnemy:
Delphi-Quellcode:
unit enemy;

interface

uses ExtCtrls,Classes,Forms,Windows;

 Type TEnemy = class(TComponent)
      private
        enemyimage : TImage;
        enemyname : string;
        enemypath : string;
        enemysize : integer;
        enemypriority : double;
      public
        constructor Create(AParent: TForm; EPath : string; EName: string; ESize: Integer; IHandle : HICON);
        destructor Destroy;override;
        property enimage : TImage read enemyimage;
        property enname : string read enemyname write enemyname;
        property enpath : string read enemypath write enemypath;
        property ensize : integer read enemysize write enemysize;
        property enprior : double read enemypriority write enemypriority;
 end;

    TEnemyArray = array of TEnemy;

implementation

Constructor TEnemy.Create(AParent: TForm; EPath : string; EName: string; ESize: Integer; IHandle : HICON);
begin
  inherited Create(nil);
  enemyimage := TImage.Create(nil);
  with enemyimage do
  begin
    Parent := AParent;
    Left := 400;
    Top := 400;
    AutoSize := true;
    Picture.Icon.Handle := IHANDLE;
    enemyname := EName;
    enemypath := EPath;
    enemysize := ESize;
   end;
end;

destructor TEnemy.Destroy;
begin
  enemyimage.Free;
  inherited;
end;

end.
Das AParent übergebe ich, damit das IMAGE auch auf dem FORM angezeigt wird. Aber die erste Zeile des CONSTRUCTORs verstehe ich nicht.inherited Create(nil); AParent, so wie vorher geschrieben geht nicht und self auch nicht. Oder ist das mit NIL so richtig?
Daniel Einhaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#3

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 13:34
Was heißt denn "geht nicht"? Kommt eine Fehlermeldung? Wenn ja, welche?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 13:46
Delphi-Quellcode:
Constructor TEnemy.Create(AOwner:Tcomponent;AParent: TForm; EPath : string; EName: string; ESize: Integer; IHandle : HICON);
begin
  inherited Create(AOwner);
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#5

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 14:00
Oder man überschreibt einfach den geerbten Konstruktor und lässt die weiteren Eigenschaften anschließend setzen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#6

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 14:41
bei inherited Create(AParent); kommt "ungültige Zeigeroperation"

bei inherited Create(Owner); kommt nix. scheint zu gehen.

Wie ist das inherited Create(Owner); zu verstehen?

Ich rufe im Constructor der Klasse den Constructor der Superklasse auf mit dem Parameter das meine Klasse der Besitzer des Constructors ist?

Gruß und Dank
Daniel Einhaus
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.655 Beiträge
 
Delphi 12 Athens
 
#7

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 14:43
Nein, Du rufst den geerbten Konstruktor auf und sagst ihm, wer der Owner Deiner Klasse ist.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#8

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 17:46
Mal eine Frage, warum ist dein TEnemy denn ein Nachfahre von TComponent? Das wurde dir ja nur empfohlen, damit du den TImage was übergeben kannst. Oder übersehe ich da was?

Ansonsten einfach standardmäßig von TObject erben (bzw. "gar nicht" erben was ja implizit von TObject erbt).

Außerdem, würde ich den Konstruktor nicht überschreiben ohne das den Code hinzuweisen (mit override). Das geht aber nur, wenn der Konstruktor gleich bleibt.

Wenn du das stattdessen dennoch in einen Einzeiler machen willst, dann würde ich das so machen:

Delphi-Quellcode:
type
  TBlub = class(TParent)
  private
    f : Integer;
  public
    function Init(foo : Integer) : TBlub;
  end;

function TBlub.Init(foo : Integer) : TBlub;
begin
  f := foo;
  Result := Self;
end;
Statt:
Delphi-Quellcode:
type
  TBlub = class(TParent)
  private
    f : Integer;
  public
    constructor Create(foo : Integer);
  end;

constructor TBlub.Create(foo : Integer);
begin
  inherited Create;
  f := foo;
end;
Das sieht dann besser aus, anstatt den Konstruktor zu überdecken.

MfG
Fabian
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Deinhaus

Registriert seit: 31. Jan 2008
12 Beiträge
 
#9

AW: eigene Klasse; Constructor inkl. TImage

  Alt 23. Jun 2010, 19:02
Hi,

hm... ich hab das gemacht, weil es vorher irgendwie nicht lief und als ich das dann eingetragen hatte, ging es plötzlich.

Ich habs jetzt rausgenommen und es geht auch. Keine Ahnung, was ich noch gemacht habe in der Zwischenzeit.

Frage: Ist es ok, wenn ich den CONSTRUCTOR einer Klasse alle properties der Klasse einstellen lasse, oder sollte ich das gesondert machen damit der CONSTRUCTOR nicht so voll ist?

Gruß
Daniel Einhaus
  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 22:45 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