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
Benutzerbild von bernau
bernau

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

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 15: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
 
#2

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 15: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 15:46 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 16: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)
Ein Therapeut entspricht 1024 Gigapeut.

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

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

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 16: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
 
#5

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 17: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 17:11 Uhr)
  Mit Zitat antworten Zitat
hoika

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

AW: Problem mit verschiedenen Forms

  Alt 17. Apr 2018, 17:09
Hallo,
das wäre eine gute Entkopplung von Hauptformular.
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Problem mit verschiedenen Forms

  Alt 18. Apr 2018, 12:35
ot
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.
Wie kommst Du auf diese Werte? Ich habe mir mal Spassenshalber ein Projekt erstellt mit 28 zusätzlichen Forms.
Auf jeder Form ist nur ein Label was beim Programmstart umbenannt wird.
Das umbennen erfolgt in einer Procedure für alle Forms nachdem diese erstellt wurden.
In der MainForm (das gibt es 2 Labels) werden mir die MS fürs erstellen der Fenster und fürs umbennen angezeigt.
Mit 250ms + 110ms komme ich absolut nicht hin.
Nutzt Du einen Super-Rechner mit 10 Cores oder so?
/ot
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Problem mit verschiedenen Forms

  Alt 18. Apr 2018, 12:49
Ich aber hier eine Form, die braucht über 5 Sekunden, im FormDesigner noch mehr, und dann anschließend noch das Laden der Daten (DBGrids)
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Problem mit verschiedenen Forms

  Alt 18. Apr 2018, 12:56
@himitsu: Ja eben, 250+110 ist ja immer noch unter 1000ms (=1 Sekunde)
2500ms plus 1100ms wäre realistischer.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort

 
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 21:31 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