Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Weiß einer in welcher Folge die Formulare freigegeben werden (https://www.delphipraxis.net/122608-weiss-einer-welcher-folge-die-formulare-freigegeben-werden.html)

Popov 19. Okt 2008 09:51


Weiß einer in welcher Folge die Formulare freigegeben werden
 
Nehmen wir ein Programm mit fünf Formularen an: Form1, Form2, Form3, Form4 und Form5. Form1 ist das Mainformular. Nun beende ich das Programm in dem ich Form1 schließe. In welcher Reihenfolge werden nun die Fenster freigegeben?

- nach Application.Components Folge?
- wie sie erstellt wurden?
- nach Screen.Forms in der Z-Ordnung Folge?
- es wird eine Message an alle Fenster geschickt und jeder schließt für sich alleine?

SirThornberry 19. Okt 2008 10:46

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Pack einfach in das OnDestroy einen Hinweis und du wirst es sehen. Zudem hängt es auch davon ab wie du die Formulare erzeugst. Also ob du einen Owner angibst oder nicht und was du als Owner angibst. Auch der Parent spielt eine Rolle. Wenn du einem Form einen Parent zuweist wird das Form auch freigegeben bevor der Parent zerstört wird.

Popov 19. Okt 2008 11:41

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Zitat:

Zitat von SirThornberry
Pack einfach in das OnDestroy einen Hinweis und du wirst es sehen.

In OnDestroy funktionieren keine Hinweise. Wenn, dann muß man es schon aufwändiger machen.

Popov 19. Okt 2008 12:17

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Ich hab gerade festgestellt, daß es auch aufwändigen nicht geht. Ich wollte das schließen in einer Logdatei protokollieren. Bis auf Form1 wurde nichts protokolliert.

alzaimar 19. Okt 2008 12:33

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Was hälst du von einem Blick in den Quellcode? Dort steht, das Du mit deiner ersten Annahme Recht hast.

SirThornberry 19. Okt 2008 12:43

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Aber Application.Components funktioniert doch nur wenn als Owner die Application angegeben wurde?! Und ob Nachrichten im OnDestroy funktionieren hängt von der Delphiversion ab die im Profil ja leider nicht angegeben wurde.

Popov 19. Okt 2008 13:19

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Zitat:

Zitat von alzaimar
Was hälst du von einem Blick in den Quellcode? Dort steht, das Du mit deiner ersten Annahme Recht hast.

Ich nehme auch an es zu wisse, nur bin ich mir nicht 100% sicher.

Ich hab jetzt etwas experimentiert und in jeden FormDestroy diesen einfachen Code eingefügt:

Delphi-Quellcode:
  with TStringList.Create do
  try
    Add(Self.Name);
    SaveToFile(ExtractFilePath(ParamStr(0)) + Self.Name + '.txt');
  finally Free end;
Jedes Fenster erzeugt jetzt beim schließen eine Textdatei und die Folge ist: Form1, Form2, Form3, Form4 und zuletzt Form5.

Dabei ist es egal wie die Formulare in der Projektdatei erstellt wurden, sie kommen alphabetisch raus. Und nur zur Information, ist der Ordner in Explorer offen, werden die Dateien nur angehängt und nicht alphabetisch sortiert. Die Sortierung erfolgt also nicht im Explorer.

SirThornberry 19. Okt 2008 13:29

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Wie hast du denn die Fenster erzeugt? Automatisch erzeugen lassen? Denn das sollte auch eine Rolle spielen.
Wenn dir Reihenfolge des Freigebens für dich eine Rolle spielt solltest du dich selbst um Erzeugen und Freigeben kümmern da nur so sicher gestellt ist das es sich bei der nächsten Delphiversion noch genau so verhält und keine überraschenden Effekte auftreten.

Popov 19. Okt 2008 14:19

Re: Weiß einer in welcher Folge die Formulare freigegeben we
 
Eigentlich erstelle ich die Formulare auch selbst, ich hab erst nur allgemein gefragt, nicht speziell. Auch ist es nicht so wichtig wie sie geschlossen werden, es ist nur wichtig zu wissen in welcher Reihenfolge. Da ich die Formulare selbst erstelle, schließe ich sie auch selbst. Dabei gehe ich der Reihe nach von Oben nach Unten und schicke an jedes Formular per SendMessage eine Message die das Formular zum schließen veranlasst. Somit ist die Reihenfolge eigentlich klar, nur sagt das Ergebnis etwas anderes. Danach ist die Reihenfolge der Schließung zufällig.


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