![]() |
OnCreate wird nur einmal nach Programmstart ausgeführt
Ich hab ein ziemlich großes Problem!
Nachdem ich die versch. 'Forms' aus meinem Menü nicht mehr über eine definierte Funktion, sondern .ShowModal aufrufe, wird auch jeweilige FormCreate nur beim ersten Aufrufen ausgeführt. Das komische ist auch: wenn ich etwas geändert hab, wird dies nicht verworfen, sondern ist beim nächsten Aufruf immer noch genauso erhalten. Wie kann ich das verhindern bzw. es wieder vernünftig ans Laufen bringen? |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Die Formulare werden auch nicht freigegeben sonder nur ausgeblendet.
|
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Moin Svenkan,
also so ganz schlau werde ich aus Deinem Posting nicht. Wenn Du die Formulare in der Projektdatei erzeugen lässt, wird OnCreate natürlich nur einmal aufgerufen, ansonsten müsstest Du die Formulare dynamisch erzeugen. Bei den zu Programmstart erzeugten Formularen bewirkt ein Close lediglich ein visible := false Wenn die Formulare immer wieder gleich aussehen sollen, könntest Du sie im OnShow entsprechend initialisieren. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Vorher habe ich das ganze über eine Prozedur geöffnet:
Delphi-Quellcode:
Also müsste ich das Ganze dementsprechend auch irgendwie wieder freigeben können.
procedure ShowGeneralSettings;
begin with TGrundeinstellungen.Create(Application) do try ShowModal; finally Free; end; end; Mit .Free oder FreeAndNil meckert der Compiler aber rum und ich bekomm nen Zugriffsfehler. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Moin Svenkan,
Zitat:
Ausserdem könnte es auch hilfreich sein zu erfahren, was der Compiler anmeckert. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Liste der Anhänge anzeigen (Anzahl: 1)
Öffnen:
Delphi-Quellcode:
Im OnClose:
procedure THauptform.Grundeinstellungen1Click(Sender: TObject);
begin Grundeinstellungen.ShowModal; // Fenster grundeinstellungen öffnen IF Grundeinstellungen.ModalResult = mrOK then Datenneuladen1.OnClick(Datenneuladen1); end;
Delphi-Quellcode:
Fehlermeldung beim Schließen der Form siehe Anhang.
FreeAndNil(Grundeinstellungen);
|
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Moin Svenkan,
wird das Formular irgendwo dynamisch erzeugt? Wenn nicht sollte es auch nicht freigegeben werden, wenn ja: Das OnClose-Ereignis hat den Parameter Action. Um das Formular im OnClose freizugeben, müsstest Du den dort auf caFree setzen. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Also ich hab nix an der Erstellung geändert.
Dementsprechend werden die wohl alle autom. beim Programmstart erzeugt. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
ich würde das automatische erstellen der forms aus dem projekt herausnehmen und
dann in deinem onclick event des hauptforms folgendes machen:
Delphi-Quellcode:
wüsste nicht wo da das problem liegen soll.
with TGrundeinstellungen.Create(Self) do
try ShowModal; finally Free; end; |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
im OnClose das ganze frei zu geben knallt natürlich. Das OnClose wird vom Formular selbst ausgelöst. Du musst dir das ungefähr so vorstellen
· rufe OnClose auf wenn Procedure zugewiesen ist · Du machst irgendwas im OnClose (im schlimmsten Fall frei geben · prüfen ob im OnClose das Action geändert wurde und dann das Formular verstecken, frei geben, nichts machen etc. => ups, jetzt knallt es weil du das Formular während der Abarbeitung aus dem Speicher geschmissen hast Wenn du im OnClose frei geben willst setzte "Action" auf caFree aber gebe nicht selbst das Formular frei während es mit der Abarbeitung von Events (OnClose) etc. beschäftigt ist. Zu deiner Frage im Allgemeinen: - "OnCreate" heißt in etwa "beim Kreieren/Erstellen" - "OnClose" heißt "beim Schließen" - "OnDestroy" heißt "beim zerstören/freigeben" - "OnShow" heißt "beim anzeigen" dementsprechend ist auch klar das OnCreate nur einmal (beim kreieren) augelöst wird und nicht beim anzeigen was ja ein Show wäre. |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Wie bekomm ich denn nu folgende Anweisung richtig hin?:
Delphi-Quellcode:
Er gibt mir bei der if-Anweisung einen Zugriffsverletzung aus. Also direkt nachm Close der Form.
with TGrundeinstellungen.Create(Self) do
try ShowModal; if Grundeinstellungen.ModalResult = mrOK then Datenneuladen1.OnClick(Datenneuladen1); finally Free; end; |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
ist auch klar, du rufst zwar
Delphi-Quellcode:
auf, weißt dies aber nirgendwo der Variablen "Grundeinstellungen" zu. Um es dir zu verdeutlichen:
TGrundeinstellungen.Create(Self)
Delphi-Quellcode:
wenn dann
with TGrundeinstellungen.Create(Self) do
try ShowModal; if EtwasNichtErzeugtesBzwEineVariableDerNichtsZugewiesenWurde.ModalResult = mrOk then Datenneuladen1.OnClick(Datenneuladen1); finally Free; end;
Delphi-Quellcode:
oder
with TGrundeinstellungen.Create(Self) do
try ShowModal; if ModalResult = mrOK then Datenneuladen1.OnClick(Datenneuladen1); finally Free; end;
Delphi-Quellcode:
oder
with TGrundeinstellungen.Create(Self) do
try if ShowModal = mrOk then Datenneuladen1.OnClick(Datenneuladen1); finally Free; end;
Delphi-Quellcode:
var
lFormInstance: TGrundeinstellungen; begin lFormInstance := TGrundeinstellungen.Create(Self); try lFormInstance.ShowModal; if lFormInstance.ModalResult = mrOK then Datenneuladen1.OnClick(Datenneuladen1); finally lFormInstance.Free; end; |
Re: OnCreate wird nur einmal nach Programmstart ausgeführt
Argh!
Nicht denken, sondern nachdenken. :duck: Dankeschön. Funktioniert jetzt natürlich perfekt. :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:14 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