Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnCreate wird nur einmal nach Programmstart ausgeführt (https://www.delphipraxis.net/97552-oncreate-wird-nur-einmal-nach-programmstart-ausgefuehrt.html)

Svenkan 12. Aug 2007 18:05


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?

mkinzler 12. Aug 2007 18:07

Re: OnCreate wird nur einmal nach Programmstart ausgeführt
 
Die Formulare werden auch nicht freigegeben sonder nur ausgeblendet.

Christian Seehase 12. Aug 2007 18:10

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.

Svenkan 12. Aug 2007 18:14

Re: OnCreate wird nur einmal nach Programmstart ausgeführt
 
Vorher habe ich das ganze über eine Prozedur geöffnet:

Delphi-Quellcode:
procedure ShowGeneralSettings;
begin
  with TGrundeinstellungen.Create(Application) do
  try
    ShowModal;
  finally
    Free;
  end;
end;
Also müsste ich das Ganze dementsprechend auch irgendwie wieder freigeben können.
Mit .Free oder FreeAndNil meckert der Compiler aber rum und ich bekomm nen Zugriffsfehler.

Christian Seehase 12. Aug 2007 18:26

Re: OnCreate wird nur einmal nach Programmstart ausgeführt
 
Moin Svenkan,

Zitat:

Zitat von Svenkan
Vorher habe ich das ganze über eine Prozedur geöffnet:

Delphi-Quellcode:
procedure ShowGeneralSettings;
begin
  with TGrundeinstellungen.Create(Application) do
  try
    ShowModal;
  finally
    Free;
  end;
end;
Also müsste ich das Ganze dementsprechend auch irgendwie wieder freigeben können.
Mit .Free oder FreeAndNil meckert der Compiler aber rum und ich bekomm nen Zugriffsfehler.

Wenn Du uns zeigst, wie Du es bisher gemacht hast, und nicht, wie jetzt, wird es aber etwas schwierig einen Fehler zu finden ;-)
Ausserdem könnte es auch hilfreich sein zu erfahren, was der Compiler anmeckert.

Svenkan 12. Aug 2007 18:33

Re: OnCreate wird nur einmal nach Programmstart ausgeführt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Öffnen:

Delphi-Quellcode:
procedure THauptform.Grundeinstellungen1Click(Sender: TObject);
begin
  Grundeinstellungen.ShowModal; // Fenster grundeinstellungen öffnen
  IF Grundeinstellungen.ModalResult = mrOK then
    Datenneuladen1.OnClick(Datenneuladen1);
end;
Im OnClose:

Delphi-Quellcode:
FreeAndNil(Grundeinstellungen);
Fehlermeldung beim Schließen der Form siehe Anhang.

Christian Seehase 12. Aug 2007 18:42

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.

Svenkan 12. Aug 2007 18:52

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.

semo 12. Aug 2007 19:11

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:
  with TGrundeinstellungen.Create(Self) do
  try
    ShowModal;
  finally
    Free;
  end;
wüsste nicht wo da das problem liegen soll.

SirThornberry 12. Aug 2007 19:35

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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:04 Uhr.
Seite 1 von 2  1 2      

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