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 Form zur Laufzeit, FormShow (https://www.delphipraxis.net/52937-form-zur-laufzeit-formshow.html)

LoL 7. Sep 2005 00:04


Form zur Laufzeit, FormShow
 
Morgen :mrgreen: ,

Ich habe mir mit Neu=>Formular ein Form gemacht darauf ein parr Knöpfe usw platziert. Nun erstelle ich mit
Delphi-Quellcode:
var frm_open : Tfrm_meinForm;
begin
  frm_open := Tfrm_meinForm.Create(frm_main);
  frm_open.ShowModal;
end;
Funktioniert auch soweit wunderbar.
Jetzt wollte ich beim öffenen des Forms noch ein paar Komponenten ausrichten:
Delphi-Quellcode:
procedure Tfrm_meinForm.FormShow(Sender: TObject);
begin
  tc_graphen.Height := frm_meinForm.Height - 40; //Bekomme hier schon eine Exception da frm_meinForm.Height nicht gelesen werden kann
end;
Kann mir jemand helfen und sagen woran das liegt?

Sharky 7. Sep 2005 07:04

Re: Form zur Laufzeit, FormShow
 
Hai LoL,
Zitat:

Zitat von LoL
Code:
procedure Tfrm_meinForm.FormShow(Sender: TObject);
begin
  tc_graphen.Height := [color=red]frm_meinForm[/color].Height - 40;
end;

wo kommt denn frm_meinForm her?

Wenn tc_graphen so hoch wie die Form sein soll auf der dies liegt kannst Du es so mache:
Delphi-Quellcode:
procedure Tfrm_meinForm.FormShow(Sender: TObject);
begin
  tc_graphen.Height := self.Height - 40;
end;

r2c2 7. Sep 2005 07:15

Re: Form zur Laufzeit, FormShow
 
Um das mal zu erklären, was Sharky geschrieben hat:
Du könntest ja mehere Instanzen deiner Form haben(Stichwort MDI). Woher soll dann die Klasse deiner Form wissen, welche Instanz angesprochen wird und wie die heißt? Deshalb gibt es 'self'. Delphi-Referenz durchsuchenself verweist immer auf das Objekt, in dem sich die Mthode 'befindet'.

mfg

Christian

Sharky 7. Sep 2005 07:23

Re: Form zur Laufzeit, FormShow
 
Hai Christian,

das kommt noch dazu. Aber LoL hat ja ausserdem in seiner ersten Unit eine Variable frm_open für seine Tfrm_meinForm genommen ;-)

Ich denke mal er hat versucht auf die automatisch erzeuge Variable frm_meinForm in der zweiten Unit zuzugreifen. Diese ist aber (wenn es bei den Projektoptionen ausgeschaltet ist) nie "erzeugt" worden. Darum auch meine Frage wo diese denn herkommt :stupid:

jensw_2000 7. Sep 2005 07:42

Re: Form zur Laufzeit, FormShow
 
Zitat:

Zitat von Sharky
Hai Christian,

das kommt noch dazu. Aber LoL hat ja ausserdem in seiner ersten Unit eine Variable frm_open für seine Tfrm_meinForm genommen ;-)

Ich denke mal er hat versucht auf die automatisch erzeuge Variable frm_meinForm in der zweiten Unit zuzugreifen. Diese ist aber (wenn es bei den Projektoptionen ausgeschaltet ist) nie "erzeugt" worden. Darum auch meine Frage wo diese denn herkommt :stupid:

Das wird wahrscheinlich die Ursache sein ...

Ich erledige das solche Sachen immer zwischen dem Create und dem Show(modal),
dann passieren solche Fehler nicht ...

Delphi-Quellcode:
var frm_open : Tfrm_meinForm;
begin

  frm_open := Tfrm_meinForm.Create(frm_main);
 
  With frm_open do
  begin
    tc_graphen.Height := Height - 40;
    ShowModal;
  end;
end;
:hi:
Gruß am Alle ..

LoL 7. Sep 2005 09:02

Re: Form zur Laufzeit, FormShow
 
Das is es auch :)
Danke für eure Erläuterungen :thumb:

r2c2 7. Sep 2005 11:06

Re: Form zur Laufzeit, FormShow
 
Zitat:

Zitat von Sharky
Hai Christian,

das kommt noch dazu. Aber LoL hat ja ausserdem in seiner ersten Unit eine Variable frm_open für seine Tfrm_meinForm genommen ;-)

Ich denke mal er hat versucht auf die automatisch erzeuge Variable frm_meinForm in der zweiten Unit zuzugreifen. Diese ist aber (wenn es bei den Projektoptionen ausgeschaltet ist) nie "erzeugt" worden. Darum auch meine Frage wo diese denn herkommt :stupid:

Könntest Recht haben, bzw. hast Recht, denn so interpretiere ich Lols Post. Ich kann mich aber relativ gut rausreden, wenn ich sage: Ich wollt nur Self erklären... :zwinker:

mfg

Christian

P.S.: Und dem Fall, dass man die Form selbst erzeugt, sollte man noch den Pointer(in dem Fall frm_mainForm) löschen. Dann bekommt man auch gleich vom Compiler die Meldung: "Kenn ich nicht...!"

mfg

Christian


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