Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Konstruktor für Objekte (https://www.delphipraxis.net/146705-konstruktor-fuer-objekte.html)

volf 25. Jan 2010 20:45


Konstruktor für Objekte
 
Musste leider einen neuen Account registrieren, da ich meinen alten Benutzernamen vergessen habe.

Zu meinem Problem:

Delphi-Quellcode:
 type
TAuto = class(TObject)
private
FTempo: Integer;
public
Bild: TImage;
constructor Create(path:string);
procedure Gasgeben;
procedure Bremsen;
property Geschwindigkeit: Integer read FTempo;
end;
Also ich habe hier eine Klasse "TAuto", die die Eigenschaft Bild vom Datentyp TImage hat. Ich create die Klasse und initialisiere die Werte. In diesem Fall hat die Klasse TAuto eine unidirektionale Assoziation zu TImage? Wenn ja warum nicht Aggregation?
Das Createn des Objekts "Bild" macht der Konstruktor, oder liege ich da falsch?

mkinzler 25. Jan 2010 20:50

Re: Konstruktor für Objekte
 
Bild ist erstmal eine Referenz(Zeiger) auf eine TImage-Instanz, ob du eine neue erstellst oder eine vorhandene referenzierst, steht dir frei
Zitat:

Das Createn des Objekts "Bild" macht der Konstruktor, oder liege ich da falsch?
Nicht automatisch

s.h.a.r.k 25. Jan 2010 21:42

Re: Konstruktor für Objekte
 
Es ist im Prinzip eine Aggregation, wobei das Image auch seinen Owner kennen könnte. Und zwar entscheidest du das, wenn du das Image erzeugst:
Delphi-Quellcode:
Bild := TImage.Create( <Reference to Owner> );
Das Problem hierbei ist, dass der Owner vom Typ TComponent sein muss und nicht TObject. Ebenso spielt der Owner beim Freigeben des Speichers eine Rolle.

sx2008 25. Jan 2010 23:40

Re: Konstruktor für Objekte
 
Anstelle eines TImage würde ich ein TPicture verwenden.
TImage ist ein sichtbares Control.
Dagegen ist TPicture eine Kontainerklasse für ein Bitmap, JPeg, GIF oder anderen Bildformates.
Delphi-Quellcode:
type
TAuto = class(TObject)
  private
  FTempo: Integer;
  FBild : TPicture;
public
  constructor Create(const path:string);
  Destructor Destroy;override;
  procedure Gasgeben;
  procedure Bremsen;
  property Geschwindigkeit: Integer read FTempo;
  property Bild: TPicture read FPicture;
end;

constructor TAuto.Create(const path:string);
begin
  inherited Create;
  FBild := TPicture.Create;
  if FileExists(path) then
    FBild.LoadFromFile(path);
end;

Destructor Destroy;override;
begin
  FPictures.Free;
  interited;
end;

volf 26. Jan 2010 15:20

Re: Konstruktor für Objekte
 
Vielen Dank für die hilfreichen Antworten.
...


Man kann ja auch Objekte createn, in dem man einfach die Objekte (von der Leiste oben) auf das Formular zieht. Sagen wir, ich platzier auf mein Formular einen Button. Wenn ich das Programm jetzt compiliere und ausführe, dann wird dieses Objekt ja im Hintergrund createt. Gibt es eine Möglichkeit den Quellcode dieses Konstruktors anzusehen?


Mfg

shmia 26. Jan 2010 16:49

Re: Konstruktor für Objekte
 
Zitat:

Zitat von volf
...Sagen wir, ich platzier auf mein Formular einen Button. Wenn ich das Programm jetzt compiliere und ausführe, dann wird dieses Objekt ja im Hintergrund createt. Gibt es eine Möglichkeit den Quellcode dieses Konstruktors anzusehen?

Wenn du den Sourcecode der VCL hast.
Du klickst mit gedrückter Strg-Taste auf den Klassennamen TButton
Delphi-Quellcode:
TForm1=class(TForm)
  Button1:TButton; // <-
Dann öffnet sich die Unit StdCtrls an der Deklaration von TButton.
Aber nur, wenn das Programm nicht läuft.
Aufpassen, dass du diese Unit nicht versehentlich änderst; auf jeden Fall nicht speichern.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 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