![]() |
AW: Fehler bei Form.ShowModal
Die Reihenfolge in der dpr ist nicht irrelevant sondern wird genauso aus dem Formulare-Abschnitt der Projektoptionen gesteuert bzw. vorgegeben.
Dennoch ist der Einwand gut, daß man Formulare erst dann erzeugen sollte, wenn man sie braucht, das beschleunigt ja auch den Anwendungsstart. Eventuell wird das fragliche Formular irgendwann vorher freigegeben? Sherlock |
AW: Fehler bei Form.ShowModal
Zitat:
Die Form wird in der dpr definitiv erzeugt, allerdings zu spät für den entsprechenden Codeteil. Und nur wenn es erzeugt wurde kann man es verwenden nicht wenn es erzeugt werden würde (wenn da nicht vorher die Exception fliegt) |
AW: Fehler bei Form.ShowModal
Eventuell Offtopic, wer weiß das schon
Zitat:
Es war mir schon bewusst aufgrund der Fehlermeldung das dieses Objekt noch nicht existiert. Nur kann ich es gerade nicht nachvollziehen. Ich führe mal ein paar selbst-Tests durch mit .DPR und langsamen Formularen. Bis jetzt habe ich so ein Verhalten noch nicht erlebt, dass das Laden lange dauern kann schon. Das ein Objekt, obwohl man es explizit Created nicht erstellt wird erscheint mir im Moment unlogisch. Was mir einfällt wäre, wenn ich das Hauptformular Visible=True setze, kann es sein das es da schon angezeigt wird bevor Application.Run einsetzt? Sonst ist es für mich unlogisch. |
AW: Fehler bei Form.ShowModal
Zitat:
Irrelevant in Bezug auf die Erstellungsreihenfolge. Wenn Form_DBZugriffsdaten bereits im Form_Main angezeigt werden soll, dann muss sein Application.CreateForm in der dpr auch vor dem der Form_Main stehen. Pech: In dem Fall wird dann Form_DBZugriffsdaten zur MainForm des Programmes. Für diese Reihenfolge ist die Reihenfolge im Uses "egal". |
AW: Fehler bei Form.ShowModal
Es ist doch ganz einfach
Delphi-Quellcode:
Also wenn im Konstruktor von
begin
Application.Initialize; Application.MainFormOnTaskbar := True; Application.CreateForm(TForm_Main, Form_Main); // ruft den Konstruktor auf Application.CreateForm(TForm_Passwort, Form_Passwort); Application.CreateForm(TForm_DBZugriffsdaten, Form_DBZugriffsdaten); // der auf das hier zugreifen möchte Application.Run; end.
Delphi-Quellcode:
eine Instanz von
TForm_Main
Delphi-Quellcode:
erzeugt wird, wo dann
TMYSQLDB
Delphi-Quellcode:
verwendet wird, dann passiert das eben.
Form_DBZugriffsdaten
|
AW: Fehler bei Form.ShowModal
Ich versuche mal ein Scenario zu skizzieren:
MainForm wird erzeugt, darin im OnCreate wird die TDatenbankunit erzegut, die wiederum im Create in der Connect-Funktion auf die zu diesem Zeitpunkt noch nicht existierende TForm_DBZugriffsdaten zugreift. Mit dem Workarround wird sie nun bei Bedarf erzeugt und dann nochmal später automatisch aus der dpr? Kann das nicht auch Probleme machen? |
AW: Fehler bei Form.ShowModal
Zitat:
Mach Dir mal ein Programm mit ein paar Formularen, steck jeweils ins FormCreate was rein, um dort 'nen Breakpoint setzen zu können. Setze in der dpr vor das Application.Initialize einen Breakpoint und gehe dann schrittweise durch. Was wird zuerst aufgerufen? Der Breakpoint im FormCreate des ersten Formulares oder das letzte Application.CreateForm in der dpr? |
AW: Fehler bei Form.ShowModal
Habe es mehr als Verstanden, Danke nochmal für Hinweise diesbezüglich. :thumb:
Ich wünsche Euch einen tollen Tag! Zitat:
|
AW: Fehler bei Form.ShowModal
Zitat:
denn die erste so erstellte Form wird zur MainForm, was bei einer anderen Reihenfolge zu komischen Ergebnissen führt. Tja, besser wäre es, wenn die Letzte die MainForm würde, aber das wird nicht passieren. Lösungen: nicht im Konstruktor sowas machen, sondern erst nachdem alles erstellt wurde. (mein Tipp: Delphi könnte ein OnStartup in den TForm bekommen, was im Run als Erstes aufgerufen würde) oder man muß eben weiterhin mit Messages/Timern sowas manuell machen. Oder man lässt die abhängigen Forms nicht automatisch erstellen, sondern erstellt sie selber, vor dem Zugriff darauf (es ist eh nicht immer schön, wenn "alles" automatisch erstellt wird, vor allem wenn es dann fast niemals verwendet wird) Zitat:
![]() Eine TStringList, jenes auf
Delphi-Quellcode:
gesetzt und schon könntest du
':'
![]() Und vorher vielleicht auch noch Count proüfen, ob die Anzahl passt, mit einer netteren Fehlermeldung, anstatt deinem grauenhaften "Lesefehler". (beim Zuriff über den Index, anstatt über die Namen) Aber da ich vermute, dass vor dem
Delphi-Quellcode:
jeweils ein "Name" steht, würde ich eher zu
:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:18 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