Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Form vor Mainform erstellen (https://www.delphipraxis.net/94301-form-vor-mainform-erstellen.html)

ebber 19. Jun 2007 18:07


Form vor Mainform erstellen
 
Hallo

ich habe in meinem Programm 2 Forms. Wenn ich es starte wird die MainForm ganz normal angezeigt. Ich will an der Sache auch nichts änder. Es soll blos eine 2. Form noch vorher geladen werden, damit ich auf deren Variablen zugreifen kann.

Ist das möglich ? Wie ? oder führt das zu Problemen wie z.B. wenn man macht Position - Mainformcenter ?

MfG

Apollonius 19. Jun 2007 18:17

Re: Form vor Mainform erstellen
 
Zitat:

damit ich auf deren Variablen zugreifen kann.
Meinst du globale Variablen? Auf die kannst du immer zugreifen, wenn du die Unit in der uses hast. Oder meinst du Felder der Formularklasse? Dann musst du in der *.dpr (Projekt->Quelltext anzeigen) die beiden Application.createform... so vertauschen, dass die Form, auf deren Felder du zugreifen willst, zuerst erzeugt wird.

ebber 19. Jun 2007 18:27

Re: Form vor Mainform erstellen
 
Ja ich meinte die Formulardinger.

Ja das hatte ich versucht, aber dann wir die andere Form zur Mainform.

und es gab das Problem

Zitat:

Zitat von ebber

wenn man macht Position - Mainformcenter ?

MfG

Apollonius 19. Jun 2007 18:33

Re: Form vor Mainform erstellen
 
Bäh. Habe es gerade ausprobiert, der modelt den Quelltext ja um, sobald man das Mainform neu setzt...
Muss der relevante Code umbedingt im FormCreate stehen (das meintest du doch?)? Oder reicht FormShow aus?

Zitat:

wenn man macht Position - Mainformcenter ?
Darf man das verstehen?

ebber 19. Jun 2007 18:44

Re: Form vor Mainform erstellen
 
Zitat:

wenn man macht Position - Mainformcenter ?
Ja das ist vielleicht nicht so eindeutig.
Ich meine damit, dass wenn man bei der Form einstellt Position - Mainformcenter, dass es die MainForm dann noch nicht gibt und deswegen die Form die Position der anderen nicht auslesen kann.

Ja eigentlich wäre das egal aber FormShow wird doch jedes mal wenn Form.Show ist ausgeführt, oder ?

MfG

nitschchedu 19. Jun 2007 18:59

Re: Form vor Mainform erstellen
 
Es gibt 2 möglichkeiten ;-)
geh auf Hauptprojekt und mach Rechtsklick -> Quellcode anzeigen.

Bsp:
Delphi-Quellcode:

uses
  Forms,
  main in 'main.pas' {frmEH},
  nduTrayIcon in '..\ndu Klassen\nduTrayIcon.pas',
  addvokabel in 'addvokabel.pas' {frmAV};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TfrmEH, frmEH); <- MainForm
  Application.CreateForm(TfrmAV, frmAV); <- 2 Form
  Application.Run;
end.
Entweder du Tauscht die beiden Zeilen mit CreateForm aus oder du nihmst die Zeile des 2 Forms raus und erstellst das 2 Form beim MainForm -> OnCreate mit. Aber du musst auf passen da du es dann auch wieder Freigibst bei OnDestroy.

Die Muhkuh 19. Jun 2007 19:04

Re: Form vor Mainform erstellen
 
Hi nitschchedu,

wenn Du die Einträge einfach vertauschst, ist die 2. Form die "MainForm". Funktionieren tut das so:

Delphi-Quellcode:
uses
  Forms,
  main in 'main.pas' {frmEH},
  nduTrayIcon in '..\ndu Klassen\nduTrayIcon.pas',
  addvokabel in 'addvokabel.pas' {frmAV};

{$R *.res}

begin
  Application.Initialize;
  form2 := TForm2.Create(Application);
  Application.CreateForm(TfrmEH, frmEH);  
  Application.Run;
end.
Jetzt wird form2 zwar vor der eigentlichen Mainform erstellt, jedoch wird Form2 nicht als Mainform wahrgenommen.

nitschchedu 19. Jun 2007 19:08

Re: Form vor Mainform erstellen
 
Du musst es auch als

Delphi-Quellcode:
Application.CreateForm(Tform2, form2);
Erstellen oder du lässt es und nihmst du Zeile da weg und gehst in die
MainForm.OnCreate(..)
begin
form2 := TForm2.Create(Application);
end;

und machst es da so ;-)

Die Muhkuh 19. Jun 2007 19:10

Re: Form vor Mainform erstellen
 
Wie dem auch sei, es kommt aufs gleiche raus, man muss nur dran denken, Form2 auch wieder freizugeben!

nitschchedu 19. Jun 2007 19:12

Re: Form vor Mainform erstellen
 
Zitat:

Zitat von Die Muhkuh
Wie dem auch sei, es kommt aufs gleiche raus, man muss nur dran denken, Form2 auch wieder freizugeben!

Das hatte ich oben auch schon gesagt ;-)

ebber 19. Jun 2007 21:40

Re: Form vor Mainform erstellen
 
Form2.Release würde doch den gewünschten Effekt am Ende erzeugen ?

Aber in welches event muss ich das stecken ?

MfG

nitschchedu 19. Jun 2007 21:51

Re: Form vor Mainform erstellen
 
Na dann von der Logig her bevor du versuchst da irgendwas in deinen Mainform auszulesen. Nich wa :) .

ebber 20. Jun 2007 12:58

Re: Form vor Mainform erstellen
 
Ja in Form2 OnDestroy geht das ja nicht weil es kein Selbstmörder ist oder ?

und in MainForm OnDestroy kommt auch ein Fehler. Geht das nur in MainForm OnClose ?

nitschchedu 21. Jun 2007 19:19

Re: Form vor Mainform erstellen
 
Hmm kann dir jetzt nicht mehr ganz folgen ? Am besten du Postest mal den Code von beiden Formularen.

ebber 23. Jun 2007 12:02

Re: Form vor Mainform erstellen
 
Ich erstelle hier Form2

Delphi-Quellcode:

procedure TForm1.FormCreate(Sender: TObject);
begin

        Form2 := TForm2.Create(Application);
den Speicher muss ich dann ja beim Programmende wieder freigeben ? Das geht mit Form2.Free oder Form2.Release ?

Ich möchte jetzt wissen in welches Event ich das einbauen muss. In Form2 OnDestroy oder OnClose geht das nicht weil die Form sich nicht selbst zerstören kann ? In Form1 OnDestroy kommt auch ein Fehler. In Form1 OnClose geht das. Mache ich was falsch oder kann ich das nur hier einbauen ?

MfG

Apollonius 23. Jun 2007 12:05

Re: Form vor Mainform erstellen
 
Sollte das nicht der Owner, sprich Application, automatisch freigeben, wenn Application selbst freigegeben wird?

ebber 23. Jun 2007 16:39

Re: Form vor Mainform erstellen
 
Das kann sein, das weis ich nicht.
Ich dachte das aufgrund mehrerer Hinweise.

Zitat:

Zitat von Die Muhkuh

man muss nur dran denken, Form2 auch wieder freizugeben!

MfG

nitschchedu 26. Jun 2007 11:18

Re: Form vor Mainform erstellen
 
Kannste aus die Fehlermeldung ganauer drauf eingehen ? Normaler weiße müsste Form2.Free keinen Fehler ausgaben auch wenn es schon fraigeben ist. Du kann ja vorher mal Prüfen ob es schon nil ist.
Und ach ja beim Freigeben in OnDestroy machen ;-). Ansonsten poste mal dein Projekt dann kann man sich das mal genauer ansehen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz