![]() |
Delphi-Version: 10 Berlin
Selbst erzeugtes Formular schließt sich automatisch
Hi Leute,
ich habe ein Formular, dass ich zur Laufzeit ggf. mehrfach für Datenerfassung nutzen will (Also soll sich diese Fenster mehrfach öffnen können). Diese Formular wird in der IDE fertig gestaltet, aber nicht automatisch erzeugt. Mein Problem ist, dass es immer nur kurz aufblitzt, dann aber sofort verschwindet. Bei beenden der Application kommt es dann zu einer Zugriffsverletzung, da das Formular wohl nicht mehr da ist. Das Erzeugen findet in dem Event IdTCPServer1Execute statt. Hier mal der Code:
Delphi-Quellcode:
Im TestCL-Formular wird es dann über Action:=caFree freigegeben. So ist zumindest der Plan.
procedure Tfrm_mainCL.IdTCPServer1Execute(AContext: TIdContext);
var DataStream, FileStream : TStream; Testfrm: Tfrm_TestCL; begin tempfile:=GetTempDir+FormatDateTime('yyyymmddhhnnsszzz', Now)+'.dat'; DataStream := TMemoryStream.Create; FileStream := TFileStream.Create(tempfile, fmCreate); try AContext.Connection.Socket.ReadStream(DataStream, -1, true); //ShowMessage(Format('Es wurden %d Byte empfangen', [DataStream.Size])); DataStream.Position := 0; FileStream.CopyFrom(DataStream, DataStream.Size); FileStream.Free; DataStream.Free; Testfrm:=Tfrm_TestCL.Create(Application); Testfrm.edt_Name.Text:=''; Testfrm.edt_AZ.Text:=''; Testfrm.chk_returnWithDocument.Checked:=Settings.ReturnWithDocument; Testfrm.Show; // with Tfrm_TestCL.Create(Application) do //So habe ich es auch versucht, gleicher Fehler // begin // edt_Name.Text:=''; // edt_AZ.Text:=''; // chk_returnWithDocument.Checked:=Settings.ReturnWithDocument; // Show; // end; except FileStream.Free; DataStream.Free; end; end; Hat einer einen Tipp, was ich hier falsch mache? Gruß Hobbycoder |
AW: Selbst erzeugtes Formular schließt sich automatisch
Das Problem dürfte sein, dass Du das Formular außerhalb des Main-VCL-Threads der Anwendung erzeugst. Ein IdTCPServerExecute wird i.A. in einem eigenen Thread aufgerufen.
Teste mal den Code außerhalb der Methode (soweit möglich) in einem Button-OnClick Event, o.ä.. ...:cat:... |
AW: Selbst erzeugtes Formular schließt sich automatisch
Verschiebe mal die Deklaration deiner Form-Variablen (Testfrm) in den
Delphi-Quellcode:
Abschnitt deiner Klasse. Dein Formular wird automatisch freigegeben, da beim Verlassen der Procedure der Scope auf die Variable wegfällt. So zumindest meine Vermutung.
private
Denk aber daran, dass du das Formular mit
Delphi-Quellcode:
auch wieder freigibst.
Testfrm.Free
|
AW: Selbst erzeugtes Formular schließt sich automatisch
Danke Sakura,
über einen Button funktionierts ;-) Nur wie könnte ich dann diese Formular innerhalb der Execute-Routine erzeugen lassen? Wäre per Windows-Message eine gute Idee? |
AW: Selbst erzeugtes Formular schließt sich automatisch
Zitat:
Das Formular gibt sich selbst frei (hab ich aber oben geschrieben). Und wenn ich mehrere Instanzen gleichzeitig anzeigen will, aber nur eine Variable dafür habe, wäre das mit dem Freigeben aus dem Hauptformular später ein Problem. |
AW: Selbst erzeugtes Formular schließt sich automatisch
Zitat:
![]() ...:cat:... |
AW: Selbst erzeugtes Formular schließt sich automatisch
Danke,
ich hatte es eben schon über PostMessage funktionsfähig, aber die die dort aufgeführte Lösung erscheint mir eleganter. Gruß Hobbycoder |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:07 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 by Thomas Breitkreuz