![]() |
Re: Fenster erstellt bzw. sichtbar !?
Zitat:
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:
So habe ich auch keine Fehlermeldungen mehr.
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; 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 |
Re: Fenster erstellt bzw. sichtbar !?
Warum verwendet ihr immer das Application ?
Warum nicht so :
Delphi-Quellcode:
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.
frm := Tfrm.Create (Self);
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. |
Re: Fenster erstellt bzw. sichtbar !?
Gegenfrage :
Warum Self ?? Was bewirkt es ?? Gruss Sascha |
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: |
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. |
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. |
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