AGB  ·  Datenschutz  ·  Impressum  







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

Konstruktor für Objekte

Ein Thema von volf · begonnen am 25. Jan 2010 · letzter Beitrag vom 26. Jan 2010
Antwort Antwort
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#1

Konstruktor für Objekte

  Alt 25. Jan 2010, 20:45
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?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: Konstruktor für Objekte

  Alt 25. Jan 2010, 20:50
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
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von s.h.a.r.k
s.h.a.r.k

Registriert seit: 26. Mai 2004
3.159 Beiträge
 
#3

Re: Konstruktor für Objekte

  Alt 25. Jan 2010, 21:42
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:
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.
»Remember, the future maintainer is the person you should be writing code for, not the compiler.« (Nick Hodges)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Konstruktor für Objekte

  Alt 25. Jan 2010, 23:40
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;
fork me on Github
  Mit Zitat antworten Zitat
volf

Registriert seit: 25. Jan 2010
Ort: Mannheim
11 Beiträge
 
#5

Re: Konstruktor für Objekte

  Alt 26. Jan 2010, 15:20
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
  Mit Zitat antworten Zitat
shmia

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

Re: Konstruktor für Objekte

  Alt 26. Jan 2010, 16:49
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.
Andreas
  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 10:47 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