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 constructor - AOwner immer TApplication? (https://www.delphipraxis.net/93470-constructor-aowner-immer-tapplication.html)

aLiKe 6. Jun 2007 12:05


constructor - AOwner immer TApplication?
 
Hi Leute,

bin grad ein wenig am verzweifeln. Bei meinem Problem handelt es sich um folgendes:
(Achja, nich über namengebung meckern, dbin nur dabei das Projekt hier weiterzuführen,
und großartige Namensänderungen will ich da momentan vermeiden^^)

Ich habe eine abgeleitete Klasse von TCustomChart(TKoordSys3D), welche eine Form created und sich selbst
als Owner angibt. Das wird ausgelöst bei klicken auf TCustomChart. Das ganze dient dazu,
dass kleine Koordinaten System nochmal groß anzusehn.

Delphi-Quellcode:
Frmgraphwindow2d := TFrmgraphwindow2d.create(Self);
Sooo, das läuft, kein Thema, Form wird erstellt, angezeigt und schön.
Nun will ich aber in der Form auf Self zugreifen, also auf meine Klasse.
Dazu cast ich erstmal den Parameter AOwner auf meine Klasse TKoordSys3D

Delphi-Quellcode:
constructor TFrmgraphwindow2d.create(p_AOwner: TComponent);
var
c_kSys3D : TKoordSys3D;
begin
inherited create(p_AOwner);
 c_kSys3D := TKoordSys3D.create(self);
 c_kSys3D.copy(TKoordSys3D(p_AOwner));
...
copy Methode sieht so aus

Delphi-Quellcode:
 procedure TKoordSys3D.copy(p_koordSys: TKoordSys3D);
 var l_temp_height, l_temp_width, l_temp_top, l_temp_left, l_i : integer;
 begin
  l_temp_height := Height;
  l_temp_width := Width;
  l_temp_top := Top;
  l_temp_left := Left;

  Assign(p_koordSys);
...
Hier(beim assign) gibts nun aber nach dem Compileren ein Problem, dass sich so meldet:
"TApplication kann nicht TKoordSys3D zugewiesen werden"

Edit: Was mir grad noch auffällt. Das passiert garnicht beim Kompilieren, sondern während der Laufzeit.
Allerdings gleich nach Programmstart, und da wird meine Methode die die Form created noch garnicht aufgerufen Oo



Weiß mir da keinen Rat. Aber von euch sicher jemand?!^^

Mfg
aLiKe

jbg 6. Jun 2007 12:25

Re: constructor - AOwner immer TApplication?
 
Kann es sein, dass sich im Projektquellcode (.dpr) ein Application.CreateForm() für dein Formular befindet?

aLiKe 6. Jun 2007 12:33

Re: constructor - AOwner immer TApplication?
 
Stimmt, da hab ich garnicht nachgeguckt. Befindet sich sogar 2 mal da.
Wie kommt das da hin? Dadurch dass ich über "Neu->Formular" das erstellt habe?

Hab das beides jetzt mal auskommentiert, aber jetzt wird die
Form im Programm nicht mehr geöffnet. Heißt also, die Zeilen müssen
drin bleiben(2 Mal?)

Problem werd ich also so umgehn, indem ich erst abfrage ob es sich um
TApplication handelt, und dannach casten. Oder?

mkinzler 6. Jun 2007 12:34

Re: constructor - AOwner immer TApplication?
 
Du könntest dein Formular auch selber erzeugen lassen und nicht im Projekt.

aLiKe 6. Jun 2007 12:38

Re: constructor - AOwner immer TApplication?
 
Ich hab jetzt nur im Projekt das Application.FormCreate rausgenommen, und den
Rest des codes so gelassen. Meines verständnisses nach, müßte das Formular nun
angezeigt werden. Wird es aber nicht :shock:

mkinzler 6. Jun 2007 12:41

Re: constructor - AOwner immer TApplication?
 
Warum sollte es angezeigt werden, wenn es nie erzeugt wird?

aLiKe 6. Jun 2007 12:46

Re: constructor - AOwner immer TApplication?
 
Zitat:

Zitat von aLiKe
Delphi-Quellcode:
Frmgraphwindow2d := TFrmgraphwindow2d.create(Self);

Die darauf folgenden Zeilen:
Delphi-Quellcode:
  Frmgraphwindow2d.ShowModal();
  Frmgraphwindow2d.Free();
Wird es doch an der Stelle?
Oder hab ich da nun was Elementares vergessen?

mkinzler 6. Jun 2007 12:50

Re: constructor - AOwner immer TApplication?
 
Wo befindet sich dieser Code?

aLiKe 6. Jun 2007 12:59

Re: constructor - AOwner immer TApplication?
 
Ok, hat sich erledigt... Beim öffnen der .dpr Datei
hab ich scheinbar das Projekt irgendwie nochmal mit geöffnet.
Ganz komisch, aufjedenfall funktionierts nun nach dem
entfernen der Application.CreateForm() Methode aus der .dpr.

Danke für die Hilfe^^


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