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 Fehlermeldung 'Form kann nicht erstellt werden' (https://www.delphipraxis.net/130317-fehlermeldung-form-kann-nicht-erstellt-werden.html)

BAMatze 6. Mär 2009 11:06


Fehlermeldung 'Form kann nicht erstellt werden'
 
Also hier kurz eine Erklärung zu meiner Projektarchitektur:

also ich hab die MainForm für mein Projekt also eine Art Loader, der die Kommunikation zu mehreren Perepherie-Geräten aufbaut und kontrolliert. Wenn dies geschehen ist, soll erscheint eine Form2 als fsMDIForm (Bedienoberfläche für mein Programm, Form1 läuft unsichtbar im Hintergrund weiter und hat "administrative Aufgaben"). Bis hierher lief das Projekt jetzt nach lösen des Problems "Wie schliesse ich die Form1 mit der Form2" ohne Probleme.
Nun wollte ich mehrere Formen in die Form2 als fsMDIChild integrieren, bekomme aber nach erstellen der Unit mit Form die Fehlermeldung:
Zitat:

Erste Gelegenheit für Exception bei $7C812AEB. Exception-Klasse EInvalidOperation mit Meldung 'Formular kann nicht erstellt werden. Zur Zeit sind keine MDI-Formulare aktiv'. Prozess Proj_EFPI.exe (3452)
Konnte noch kein Thread hier finden, der ein ähnliches Problem behandelt hat. Gibt es ein Problem, weil die Form2 die MDIForm ist? wenn ja, warum tritt dies nicht auf, wenn die Form3 nicht integriert ist?

Hoffe mir kann hier jemand einen Tip geben.

Vielen Dank
BAMatze

jaenicke 6. Mär 2009 11:42

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
Der Fehler rührt ganz einfach da her, dass du die Formulare automatisch erstellen lässt, oder? Und wenn dein MDI Child dann autocreatet wird vor der Anzeige des ersten Formulars, dann ist deine MDIForm in der Tat noch nicht aktiv. ;-)
Also erzeuge zumindest das MDIChild nicht automatisch, das kannst du z.B. in den Projektoptionen unter Anwendung einstellen oder direkt im Projektquelltext ändern.

Zitat:

Zitat von BAMatze
soll erscheint eine Form2 als fsMDIForm (Bedienoberfläche für mein Programm, Form1 läuft unsichtbar im Hintergrund weiter und hat "administrative Aufgaben")

Das ist doch dann aber die falsche Herangehensweise. Die MainForm ist normalerweise die Hauptbedienoberfläche und die anderen Formulare gehören dazu und nicht umgekehrt. :gruebel:

// EDIT:
Ich hab kurz in die Hilfe geschaut:
Zitat:

If the form is the main form of an MDI application, its FormStyle property must be set to fsMDIForm.
Es geht also gar nicht anders als auf die normale Art, dass das Hauptfenster auch deine Bedienoberfläche und die MDIForm ist.

Und vermutlich kannst du dir dann die Verbiegungen aus dem anderen Post auch sparen...

BAMatze 6. Mär 2009 12:20

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
hmm das hört sich natürlich nicht sehr gut für mein Projekt an. Bedanke mich aber erstmal bei dir wiedermal für die schnelle Antwort. Werde mal schauen, welche alternativen Vorgehensweisen (Frames, Pages und so weiter) noch existieren, damit ich in meinem Projekt weiter kommen kann. Wenn jemand einen Vorschlag hat, wie ich eventuell mit einem ähnlichen Vorgehen das gewünschte Ziel erreiche, bin für alles offen.

Danke

ChrisE 6. Mär 2009 12:49

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
Hallo (schon wieder ;-) ),

wie beim letzten mal hat dir auch dieses mal jaenicke den richtigen Fingerzeig gegeben. Du solltest einfach nur hingehen und die erstellungsreihenfolge deiner Formulare ändern. Wenn Dein Form2 dein MainForm ist müßte sich Deine MDI-Problematik quasi von selber lösen. Aber nur weil das dein MainForm ist muss es der Anwender nicht als erstes sehen. Daas dürfte der Knackpunkt sein :-)

Ein solches Problem hat man z.B. auch bei Splash-Screens. Dieser soll dem Anwender zeigen das die Anwendung geladen wird. Also soll dieses Fenster auch zuerst angezeigt werden. Aber ein anderes Formular soll Dein MainForm sein :-)

Also ungefähr so umsetzten (in der dpr):
Delphi-Quellcode:
Application.Initialize;
Application.CreateForm(TForm2, Form2); // <-- das hier soll dein Hauptformular sein
Application.CreateForm(TForm1, Form1); // <-- das hier soll deinen Ladezustand anzeigen
Form1.Show;
Form1.Update;
Form1.LadeAlles; // hier muss jetzt alles passieren was zum laden eben nötig ist. Und die MEthode darf erst "zurück" kommen wenn Form2 angezeigt werden soll :-)
From1.Hide;
Application.Run;
Ich hoffe, das hilft dir weiter :-)

Und wie gesagt, du brauchst dann das ganze WM_MACH_JETZT_WEITER aus dem ersten Post wahrscheinlich nicht mehr ;-)

Gruß, Chris

BAMatze 6. Mär 2009 13:50

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
also ich bedanke mich nochmal bei euch beiden, leider kommt man nicht wirklich (anscheinend) drum rum "dumme Fragen" zu stellen, beim Lernen einer Programmiersprache.

Wenn ich die Erstellungsreihenfolge in meiner Projekt-Datei ändere, ergeben sich dann für mich Probleme, infolge dieser Änderung, die sage ich mal für Anfänger unüberschaubar werden? Ist eine Neuerstellung des Projektes eventuell sinnvoller, um dann nur Anpassungsarbeit zwischen Form1 und Form2 machen zu müssen?

jaenicke 6. Mär 2009 14:05

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
Es gibt keine dummen Fragen, nur dumme Antworten. ;-)

Das Projekt neu erstellen würde sich nur lohnen, wenn du das ganze Projekt auch wirklich neu sortiert neu schreiben willst. Wenn du den Quelltext oder die Formulare wieder übernehmen willst, dann bringt das nicht viel, dann reicht es auch das zu ändern.

Wenn du ein sauberes Programm haben willst, dann ist es aber durchaus sinnvoll von vorne anzufangen, zu überlegen was wo passieren soll und die Komponenten z.B. auch alle zu benennen (dabei hilft auch GExperts).
Denn Form1, Form2, Form3, Button1, Button2, ... sagt gar nichts aus und macht das Programm später schlecht lesbar und schwieriger zu ändern.
Wenn du dann den Code dazu wieder schreibst, dann hast du schon eine Grundordnung drin. Als Referenz hast du ja den alten Code, falls du wo nicht weißt wie das ging.

Wenn das eher eine Übung war, dann kannst du das natürlich auch einfach so fertig machen, solltest das aber fürs nächste Mal im Hinterkopf behalten. ;-)

BAMatze 6. Mär 2009 14:18

Re: Fehlermeldung 'Form kann nicht erstellt werden'
 
Also das Programm ist sowohl eine Übung, als auch notwendig. Ist ein Programm, welches ich für die Firma als Steuerungsprogramm für eine Produktionsanlage schreibe. Es ist auch schon die überarbeitete Version, in der es sicherlich in der ein oder anderen Unit noch überarbeitungswürdige Bereiche gibt. Die Form2 hab ich nur vormodelliert, um dem Auftraggeber einen Eindruck zu geben, wie es aussehen kann und damit er Änderungen und Wünsche anbringen kann, deswegen sind hier auch noch eine Menge Komponenten und Controlls unbenannt. Bei den Forms (siehe Form1 und Form2) muss ich zugeben, habt ihr recht, hab ich bisher immer über die Dateinamen identifiziert, aber jemand anderes kann dies sicherlich nicht riechen.
Die Lauffähigkeit des Programmes (vorallem sauberes terminieren, wie man auch an meinen anderen Threats sieht) liegt mir dabei sehr am Herzen, weil dies in der 1. Version nicht wirklich gelungen ist. Nach einbinden einer ActiveX-Komponente (welche nicht von mir geschrieben war), hat sich das Programm immer regelmäßiger nicht vollständig terminiert. Was sich durch Erweitern des Programmes nur verschlimmert hat. Dies soll in dieser Version möglichst vermieden werden. Deswegen versuche ich auch hier über dieses Forum, mit eurer Hilfe meine Wissenslücken zu schließen.

Werde also am Montag nach eurem gegebenen Vorschlag das Programm in der Struktur umgestalten, damit die Hauptform auch meine Form 2 ist.


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