Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TForm.Name bekommt fortlaufende Nr angehängt (https://www.delphipraxis.net/204614-tform-name-bekommt-fortlaufende-nr-angehaengt.html)

norwegen60 11. Jun 2020 17:56

TForm.Name bekommt fortlaufende Nr angehängt
 
Hallo zusammen,

ich habe mit einem Formulat das Phänomen, dass dieses bei jedem Aufruf zu seinem Namen eine Nr. angehängt bekommt. Ich erzeuge und öffne das Fenster ganz normal über
Delphi-Quellcode:
   Form1 := TForm1.Create(nil):
  try
    Form1.Showmodal;
  finally
    Form1.Free;
    Form1:=nil;
  end;
Wenn ich mir Form1.Name anzeigen lasse, heißt es mit dem ersten Aufruf Form1, mit dem zweiten Aufruf Form1_1, Form1_2, ...

Das stelle ich bei keinem anderen Formular fest. Ich speichere beim Schließen die Position unter Form.Name und das nutzt natürlich wenig, wenn das Form beim nächsten Aufruf einen anderen Namen hat.

Weiß jemand woher das kommt?

Problem tritt mit Delphi XE auf

Danke
Gerd

mmw 11. Jun 2020 18:59

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
hallo,
das liegt daran, das Tform1 automatisch erzeugt wird. Project/Optionen/Anwendung/Formulare

so funkioniert es

Delphi-Quellcode:
var
  frm: TForm1;
begin

  try
    frm := Tform1.Create(nil);
    frm.ShowModal;

  finally
    frm.Free;
  end;
end;

zeras 11. Jun 2020 19:28

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Dann vergib doch dem Formular einen Namen. Das sollte dann doch reichen.

norwegen60 11. Jun 2020 19:28

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Nein, automatisch wird es sicher nicht erzeugt. Aber trotzdem: Mit der lokalen Variablen habe ich ein Workaround das funktioniert.

Verstehen tu ich es trotzdem nicht, denn ich verwende in der Regel immer die bei TForm automatisch erstellte globale Variable Form1 und habe das noch nie festgestellt. Sonst würde die Wieder-Positionierung öfters nicht funktionieren.

Dadurch dass ich Form.ShowModal aufrufe und danach Free und = NIL setze, sollte es auch nicht als Folge Instanz gedeutet werden.

Danke
Gerd

Redeemer 11. Jun 2020 21:07

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Hast du Application.CreateForm() aus dem Projekt-Quelltext entfernt? Das kann man auf bei dem von mmw geposteten Menüpfad einstellen, funktioniert bei komplexeren Projekten mit Startparametern aber eher schlecht als recht.

Zitat:

Zitat von mmw (Beitrag 1467091)
hallo,
das liegt daran, das Tform1 automatisch erzeugt wird. Project/Optionen/Anwendung/Formulare

so funkioniert es

Delphi-Quellcode:
var
  frm: TForm1;
begin

  try
    frm := Tform1.Create(nil);
    frm.ShowModal;

  finally
    frm.Free;
  end;
end;

Keinen Code posten, wo der Compiler meckert.

himitsu 11. Jun 2020 21:13

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Ja klar, der ist ja auch syntaktisch total falsch.

Variable im Finally nicht initiailisiert, ist noch das gerinngste Problem.
Das Create gehört vor das TRY, denn wenn es da knallt, dann darf auf keinen Fall das Free ausgeführt werden, weil (A) die Variable nicht initialisiert ist und (B) das Objekt bereits im Create freigegeben wurde, da der Zeiger des Result der Variable ganricht zugewiesen werden konnte, weil es knallte.

Formularnamen sind global eindeutig,
und wenn sowas bereits existiert, dann wird nunmal der Name so geändert, dass es passt.

norwegen60 11. Jun 2020 21:40

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Zitat:

Zitat von himitsu (Beitrag 1467098)
Formularnamen sind global eindeutig,
und wenn sowas bereits existiert, dann wird nunmal der Name so geändert, dass es passt.

Wieso wird der Name aber nicht "freigegeben"? Wie gesagt, beim ersten Create ist der Name noch "Form1". Wenn ich dann Form1 schließe und gleich wieder Öffne ist er Form1_1 usw.

Ich habe auch probiert
Delphi-Quellcode:
  if not assigned(Form1) then
    Form1 := TForm1.Create(nil);
  try
    Form1.Showmodal;
  finally
    Form1.Free;
    Form1:=nil;
  end;
Damit bin ich sicher, dass Form correct genillt wurde und damit sollte ja auch der Name frei sein

himitsu 11. Jun 2020 22:17

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Dann machst du wohl was falsch?

* entweder der Name steht so in der DFM
* oder es gibt bereits ein globales Objekt mit diesem Namen (z.B. TForm, TDataModule oder TService)

siehe TReader.ReadRootComponent->FindUniqueName in System.Classes

norwegen60 11. Jun 2020 23:01

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
Ja, und ich habe den Fehler auch gefunden. Im OnClose des Formulars stand
Delphi-Quellcode:
Form1 := nil

himitsu 12. Jun 2020 09:40

AW: TForm.Name bekommt fortlaufende Nr angehängt
 
In dem Fall kann ich nur das sagen, das ich hier immer sage:
Schmeiß diese globale Variable weg.

Auch bau automatisch erzeigten Formularen kann man diese Variable entfernen und in die DPR verschieben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:28 Uhr.
Seite 1 von 2  1 2      

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