AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Problem mit verschiedenen Forms

Ein Thema von DomPerle · begonnen am 17. Apr 2018 · letzter Beitrag vom 20. Apr 2018
Antwort Antwort
Seite 1 von 3  1 23   
DomPerle

Registriert seit: 26. Apr 2017
20 Beiträge
 
#1

Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 14:47
Habe jetzt schon lange in den Themen gesucht, aber noch nicht das richtige gefunden.
Meine Anwendung besteht aus Form1, Form2, Form3.

In Form1 Button1Click startet Form2 und Button2Click startet Form3.
Form3 := TForm3.Create( Self );
Form3.Show;
äquivalent
Form4 := TForm3.Create( Self );
Form4.Show;
Form3 und Form4 sollen gleichzeitig sichtbar sein.
Wird in Form1 ein anderes Member ausgewählt, so möchte ich erreichen, daß Form3 und/oder Form4 falls geöffnet, geschlossen werden.
Bei Form3.Close bzw. Form4.Close erhalte ich 'AccessViolation'.
Ausserdem werden bei Button1Click bzw. Button2Click immer neue Fenster göffnet.
Beim Form3.ShowModal bzw. Form4.ShowModal läßt sich immer nur eines der beiden Fenster öffnen.

Ich hoffe ich habe mich für einen Anfänger klug genug ausgedrückt.
Für schnelle Hilfe bedanke ich mich jetzt schon.
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#2

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 15:43
Ich bin ja kein großer Freund davon, Fenster selber zu erzeugen.
Die IDE ist eine relativ gute IDE, wo man vieles nicht mehr von Hand machen muss. Lasse deine Fensterinstanzen doch alle beim Programmstart automatisiert erzeugen, und vergiss das TFormX.Create().
Dann brauchst du nur noch .Show und .Close und es gibt keine Zugriffgsverletzungen mehr.

Zitat:
Beim Form3.ShowModal bzw. Form4.ShowModal läßt sich immer nur eines der beiden Fenster öffnen.
Das ist ja auch der Sinn eines modalen Fensters

Geändert von günni0 (17. Apr 2018 um 15:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#3

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 15:52
Hallo DomPerle,
zeig doch mal deinen bisherigen Quelltext, dann fällt es eventuell leichter das Problem ausfindig zu machen.
Micha
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#4

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 16:25
Ich bin ja kein großer Freund davon, Fenster selber zu erzeugen.
Die IDE ist eine relativ gute IDE, wo man vieles nicht mehr von Hand machen muss. Lasse deine Fensterinstanzen doch alle beim Programmstart automatisiert erzeugen, und vergiss das TFormX.Create().
Dann brauchst du nur noch .Show und .Close und es gibt keine Zugriffgsverletzungen mehr.

Zitat:
Beim Form3.ShowModal bzw. Form4.ShowModal läßt sich immer nur eines der beiden Fenster öffnen.
Das ist ja auch der Sinn eines modalen Fensters
Neee. Oder? Nicht dein Ernst.

Für mich ist das schlimmste, wenn alle Fenster beim Programmstart erzeugt werden. Ein Projekt von mir hat ca. verschiedene 300 Forms. Wie lange soll das denn starten?

Bei nicht modalen Fenstern ist es auch mal erlaubt mehrere Instanzen der Form zu öffnen. Dann kommst du ohnehin nicht um ein TForm.Create herum.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#5

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 16:39
Zitat:
Neee. Oder? Nicht dein Ernst.
Doch ist mein Ernst. Nicht jeder hat aber auch 300 Formulare.
ich beispielsweise habe 29 und die werden innerhalb 250 Millisekunden geladen. Bis die vom Nutzer eingestellte Sprache übernommen und allen Einstellungen geladen wurden, noch einmal 110 Millísekunden. Ist jetzt kein Weltuntergang in meinem Fall.

ich gelobe Besserung, versprochen, indem ich meinen schändlichen Code... verbessere

Geändert von günni0 (17. Apr 2018 um 16:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.145 Beiträge
 
Delphi 12 Athens
 
#6

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 17:26
Auch Modale Forms kann man mehrmals erzeugen.

Nimm z.B. eine TForm1, da drauf ein Button und darin dann
Delphi-Quellcode:
F := TForm1.Create(Self);
F.ShowModal;
Aber gerade dann, wenn Forms mehrfach erzeugt werden, darf man die globalen Form-Variablen vom Delphi nicht mehr benutzen.

Und bei Freigabe der Forms werden diese globalen Variablen nicht automatisch auf NIL gesetzt. Ein Publisched-Field im Owner der neuen Form würde automatisch NIL, wenn es genau so heißt, wie die neue Form (aber in diesem Owner darf/kann es dann auch nur je eine einzige Instanz geben)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PosEx im Delphi viel seltener praktiziert.

Geändert von himitsu (17. Apr 2018 um 17:29 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 17:54
Hallo,
das ja zwei Fragen.

Zitat:
Ausserdem werden bei Button1Click bzw. Button2Click immer neue Fenster göffnet.
Du erzeugst ja auch jedes Mal mit TFormx.Create ein neues Fenster.
Delphi-Quellcode:
Form3 := TForm3.Create( Self );
Form3.Show;
Delphi-Quellcode:
if Form3=nil then
begin
  Form3 := TForm3.Create( Self );
end;
Form3.Show;
Zitat:
Bei Form3.Close bzw. Form4.Close erhalte ich 'AccessViolation'.
Wo genau?

Nimm besser
FreeAndNil(Form3);


Die Frage wäre hier auch noch, wer schließt Form3 und Form 4, in meinem Fall hier ist es das Hauptformular (Form1).
Sollte Form3 sich selber schließen wollen, rufst du Close in Form3 auf (Form3.Close wäre das gleiche, muss aber nicht, macht man auch nicht).
Dann musst du dem Hauptform irgendwie beibringen, das die globale Variable Form3 auf nil gesetzt werden muss.
Heiko
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#8

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 18:08
Zitat:
Dann musst du dem Hauptform irgendwie beibringen, das die globale Variable Form3 auf nil gesetzt werden muss.
Ich habe irgendwo mal gelesen, dass sich für solche Fälle (Fenster öffnen, erstellen, schließen, bekannt-machen und so) jemand eine Art Wrapper-Unit geschrieben hat, die für all das zuständig ist und auch über alles bescheid weiß.
Also im Prinzip eine einfache Unit die alles macht, tut, weiß und super-schlau ist.

Vielleicht hilft sowas ja.

Geändert von günni0 (17. Apr 2018 um 18:11 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 18:09
Hallo,
das wäre eine gute Entkopplung von Hauptformular.
Heiko
  Mit Zitat antworten Zitat
17. Apr 2018, 20:48
Dieses Thema wurde am "17. Apr 2018, 20:48 Uhr" von "Daniel" aus dem Forum "Fragen / Anregungen zur DP" in das Forum "GUI-Design mit VCL / FireMonkey / Common Controls" verschoben.
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 22:12 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