AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Selbst erzeugtes Formular schließt sich automatisch
Thema durchsuchen
Ansicht
Themen-Optionen

Selbst erzeugtes Formular schließt sich automatisch

Ein Thema von Hobbycoder · begonnen am 2. Mär 2017 · letzter Beitrag vom 2. Mär 2017
Antwort Antwort
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#1

Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 11:41
Delphi-Version: 10 Berlin
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:
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;
Im TestCL-Formular wird es dann über Action:=caFree freigegeben. So ist zumindest der Plan.

Hat einer einen Tipp, was ich hier falsch mache?

Gruß Hobbycoder
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 11:43
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.ä..

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 11:45
Verschiebe mal die Deklaration deiner Form-Variablen (Testfrm) in den private Abschnitt deiner Klasse. Dein Formular wird automatisch freigegeben, da beim Verlassen der Procedure der Scope auf die Variable wegfällt. So zumindest meine Vermutung.

Denk aber daran, dass du das Formular mit Testfrm.Free auch wieder freigibst.
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#4

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 11:48
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?
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#5

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 11:50
Verschiebe mal die Deklaration deiner Form-Variablen (Testfrm) in den private Abschnitt deiner Klasse. Dein Formular wird automatisch freigegeben, da beim Verlassen der Procedure der Scope auf die Variable wegfällt. So zumindest meine Vermutung.

Denk aber daran, dass du das Formular mit Testfrm.Free auch wieder freigibst.
Im Grunde benötige ich die Variable gar nicht, hab ich nur zum testen gemacht.

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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#6

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 12:00
Nur wie könnte ich dann diese Formular innerhalb der Execute-Routine erzeugen lassen? Wäre per Windows-Message eine gute Idee?
Der korrekte Weg wird in der ersten Antwort aufgeführt: http://stackoverflow.com/questions/1...rvertcpexecute

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Hobbycoder

Registriert seit: 22. Feb 2017
955 Beiträge
 
#7

AW: Selbst erzeugtes Formular schließt sich automatisch

  Alt 2. Mär 2017, 12:16
Danke,

ich hatte es eben schon über PostMessage funktionsfähig, aber die die dort aufgeführte Lösung erscheint mir eleganter.
Gruß Hobbycoder
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:54 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