Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TImage.Create() in extra Unit (https://www.delphipraxis.net/89058-timage-create-extra-unit.html)

Sadrax 25. Mär 2007 14:07


TImage.Create() in extra Unit
 
Hallo,
ich möchte gerne ein Image zur Laufzeit erzeugen, was ich auch geschafft habe:
Delphi-Quellcode:
var bild : TImage
begin
  bild := TImage.Create(self);
  with bild do
  begin
    parent := formMain;
    left := 50;
    top := 50;
    height := 200;
    width := 200;
    canvas.font.name := 'Arial';
    show;
  end;
end;
So weit so gut, erstelle ich mir aber eine extra Unit und in dieser eine Klasse funktioniert es nicht.
Im constructor der Klasse soll dann das Image erstellt werden, als Parameter wird u.a. eine TForm für die parent-Eigenschaft übergeben.
Wenn ich dann jedoch zu der Stelle komme:
Delphi-Quellcode:
  Spielflaeche := TImage.Create(xxx);
funktioniert es nicht.
Das Problem dürfte daran liegen, dass ich mit dem Parameter den die Create-Prozedur benötigt nicht klar komme.
In der Hilfe steht dazu ja folgendes:
Zitat:

AOwner ist die Komponente, die für die Freigabe der Instanz von TImage verantwortlich ist. Diese Komponente wird der Eigenschaft Owner zugewiesen.
Aber wenn ich das Formular, welches ich ja als Parameter bekommen habe, als Parameter übergebe kommt bei der Ausführung des Programmes immer ein Fehler.
Es funktioniert auch nicht wenn ich self, nil oder application übergebe.
Vielleicht könnte mir ja jemand das mit den Parameter welchen ich übergeben muss genauer erklären, oder wenigstens ein Beispiel nennen wie es funktioniert.

Neutral General 25. Mär 2007 14:12

Re: TImage.Create() in extra Unit
 
Hi,

Zitat:

als Parameter wird u.a. eine TForm für die parent-Eigenschaft übergeben
was heißt EINE TForm? Du musst die Form übergeben auf der das Image sein soll....
So ungefähr sollte das ganze aussehn:

Delphi-Quellcode:
// Andere Unit:
TKlasse = class
private
  FImage: TImage;
public
  constructor Create(AParent: TForm);
end;

constructor TKlasse.Create(AParent: TForm);
begin
  inherited Create;
  FImage := TImage.Create(AParent);
  with FImage do
  begin
    Parent := AParent;
    //...
  end;
end;

// Haupt-Unit:
var Test: TKlasse;
begin
  Test := TKlasse.Create(Form1);
end;
Gruß
Neutral General

Sadrax 25. Mär 2007 14:40

Re: TImage.Create() in extra Unit
 
Danke, vorallem für das Beispiel.
Das mit der TForm hatte ch falsch ausgedrückt, meinte ich aber so wie du es beschrieben hast,
allerdings hatte ich in der hauptUnit folgenden Fehler:

Zitat:

var Test: TKlasse;
begin
Test := Test.Create(Form1);
end;
Keine Ahnung warum ich das so gemacht hatte, habe ich aber immer total übersehen und überall anders den Fehler gesucht.
Vielen Dank!

Christian Seehase 25. Mär 2007 14:46

Re: TImage.Create() in extra Unit
 
Moin Zusammen,

Vorsicht:
Der Parameter, der im Konstruktor eines TComponent-Nachfolgers angegeben werden sollte ist nicht der Parent, sondern der Owner.
Der Owner ist für die Freigabe zuständig.
Wird er angegeben kümmern sich die internen VCL-Mechanismen darum, dass die Komponente freigeben wird, ansonsten (Owner = nil) muss man sich selber darum kümmern.
Der Parent ist für die Postionierung zuständig.
Die Komponente wird relativ zum Parent angezeigt.


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