AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Fehlermeldung 'Form kann nicht erstellt werden'
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung 'Form kann nicht erstellt werden'

Ein Thema von BAMatze · begonnen am 6. Mär 2009 · letzter Beitrag vom 6. Mär 2009
Antwort Antwort
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#1

Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 12:06
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
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 12:42
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 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.

// 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...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 13:20
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
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 13:49
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
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 14:50
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?
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.586 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 15:05
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.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
BAMatze

Registriert seit: 18. Aug 2008
Ort: Berlin
759 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: Fehlermeldung 'Form kann nicht erstellt werden'

  Alt 6. Mär 2009, 15:18
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 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