Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Fenster erstellt bzw. sichtbar !? (https://www.delphipraxis.net/90549-fenster-erstellt-bzw-sichtbar.html)

dor557 21. Apr 2007 02:31

Re: Fenster erstellt bzw. sichtbar !?
 
Zitat:

Zitat von uwewo

Falls Du Daten aus dem Form auslesen möchtest, solltest Du es vor Release und NIL tun.

Wenn es Dir um verschiedene Instanzen der Form geht, verwende doch einfach MDIChilds!
Damit könntest Du ein zweites Form öffnen und nach dem auslesen das erste schliessen.

Der entscheidende Tipp kam nun :) MDIChilds

Ich hatte das Formular sowiso schon als MDIChild gesetzt, nur noch nicht die Ganzen Möglichkeiten entdeckt. Bzw gewusst wo ansetzen.

Nun habe ich das Folgender massen gelöst :

Delphi-Quellcode:
   MainForm.RichEdit1.Lines.Clear;
   MainForm.RichEdit1.text := ParamBlobToStr(lpData);
   if not (length(MainForm.RichEdit1.Lines[0]) > 1) then
   begin
     MainForm.RichEdit1.Lines.Add(ParamStr(1));
   end;
   if (length(MainForm.RichEdit1.lines[0]) > 2) then
   with MainForm do
   begin
     XMLopenF.FileName := MainForm.RichEdit1.Lines[0];
     AuswahlPanel.Visible := false;
     if MDIChildCount > 0 then
       for i:=0 to MDIChildCount - 1 do
         MDIChildren[i].Close;
      xmlDatenF := TxmlDatenF.create(MainForm);
      xmlDatenF.Show;
   end;
So habe ich auch keine Fehlermeldungen mehr.

Mal eine Frage bezüglich dem Befehl Tform.Create....

Mein Alter Herr hatte damals immer mit Create(self) gearbeitet...

Das das nicht egal ist weiss ich aber in wie weit beeinflusst das den verlauf des Programmes wenn ich anstatt create(Application) dann Create(MainForm) mache oder hat das keine direkte Bedeutung ??

Aber sinnvoller ist es denke ich alle Male... oder ist das sogar bei einer MDI Anwendung vorraussetzung ??

Gruss Sascha

Hansa 21. Apr 2007 02:44

Re: Fenster erstellt bzw. sichtbar !?
 
Warum verwendet ihr immer das Application ?

Warum nicht so :

Delphi-Quellcode:
  frm := Tfrm.Create (Self);
Natürlich unter Optionen "Form automatisch erzeugen" ausschalten. Jetzt ist die Form da. Damit sie wieder sauber verschwindet im FormClose noch CloseAction auf caFree setzen. Für mehrere Instanzen eben die Form-Namen durchnummerieren. Mit FindComponent etc.

Auf den roten Kasten ist kein Verlass. Wer ist Dein alter Herr ? :shock: Der sagt zumindest sinngemäß dasselbe wie ich. :mrgreen: Das mit dem MDI sind allenfalls Randeffekte.

dor557 21. Apr 2007 07:49

Re: Fenster erstellt bzw. sichtbar !?
 
Gegenfrage :

Warum Self ?? Was bewirkt es ??

Gruss Sascha

Hansa 21. Apr 2007 23:27

Re: Fenster erstellt bzw. sichtbar !?
 
Gegenfrage von mir : geht Deine F1-Taste nicht ? :mrgreen:

Application ist so ziemlich das globalste, was es gibt. Da wurde vor längerem aus gutem Grunde die Sichtbarkeit vermindert, private usw. eingeführt und was wird benutzt ? Das was dermaßen global ist, daß es buchstäblich an jeder Ecke verbogen werden kann. Dabei ist das nur in Ausnahmefällen nötig, z.B. wenn unbedingt Spaghetti-Code hergestellt werden muss. :wall:

Muetze1 22. Apr 2007 12:33

Re: Fenster erstellt bzw. sichtbar !?
 
Zusammenfassung des Threads:

1. Wenn du Release aufrufst, dann setzt dieses deine globale Variable der Form nicht auf NIL zurück und deine nächsten Abfragen auf Nil sagen, dass die Instanz existiert (da eine alte Adresse drin steht in der Variablen) und damit rufst eine tote Instanz auf.
2. Self ist die Instanz der Klasse in der du dich gerade befindest. Wenn du nun eine Form instanziierst und Self als Owner übergibst, dann wird das Formular bei der Freigabe deines Formulars (wo du es erstellst) mit freigegeben. Bei Application, wenn diese beendet wird. Bei letzterem kann es aber zu Problemen kommen: Ich habe es in meiner App nun grundsätzlich unterlassen Dialoge und andere Formulare (bis auf die MainForm) mit dem Application anzulegen, da es beim Schliessen der Applikation sehr oft zu Abstürzen kam. Grund dafür war einfach nur, dass TApplication die Formulare in einer (zufälligen) Reihenfolge abräumt wo dann Formulare nicht mehr existieren obwohl sie früher/später als andere Formulare gebaut wurden. Wenn ein Formular in einer anderen Klasse instaziiert wurde und an der gleichen Stelle beim abräumen des "Parents" auch wieder freigegeben wurde, dann knallte es deftig mit Application als Owner.

dor557 24. Apr 2007 12:12

Re: Fenster erstellt bzw. sichtbar !?
 
Danke für die ganzen antworten.

Haben mir sehr geholfen !

Gruss Sascha


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 Uhr.
Seite 2 von 2     12   

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