[resolved] TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Rund um die LCL und andere Komponenten
Antworten
PeterS
Beiträge: 188
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

[resolved] TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von PeterS »

Hi, ich habe ein Beispiel-Programm erzeugt, mit dem für mich nicht nachvollziehbaren Fehler,
daß ich nicht mehrere Instanzen eines Frame-Objekts erzeugen kann, in einem gemeinsamen Fenster / Form.
.
Screenshot (952).png
Screenshot (952).png (14.77 KiB) 313 mal betrachtet
.
Bitte dazu die folgende Zeile aktivieren = slashes entfernen:

Code: Alles auswählen

//{$define CompileWithError}
ZIP-File siehe Anhang.

Hat jemand eine Idee, warum das so nicht geht ?

BG Peter
Frames-Example with TStringGrid.zip
(97.52 KiB) 179-mal heruntergeladen
Zuletzt geändert von PeterS am Mi 14. Jan 2026, 09:24, insgesamt 1-mal geändert.

Benutzeravatar
Jorg3000
Lazarusforum e. V.
Beiträge: 421
Registriert: So 10. Okt 2021, 10:24
OS, Lazarus, FPC: Win64
Wohnort: NRW

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von Jorg3000 »

Hi!
Ich habe dein Zip nicht runtergeladen, aber weil bisher noch niemand geantwortet hat ...

Wenn du die Frames dynamisch zur Laufzeit erzeugst, kannst du nach jedem Create einfach FrameX.Name:=''; setzen, damit der Name nicht doppelt vorkommt (ein leerer Komponenten-Name ist erlaubt).

Und falls du die Frames zur Entwurfszeit per IDE aufs Form gesetzt hast, sollte automatisch ein anderer Name (fortlaufende Nummerierung) gesetzt werden.
Grüße, Jörg

dj_leinad
Beiträge: 45
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 4.3 / FPC 3.2.3)
CPU-Target: 64Bit
Wohnort: CH

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von dj_leinad »

Du versuchst 3 Frames mit dem gleichen Namen zu erstellen. Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

PeterS
Beiträge: 188
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von PeterS »

dj_leinad hat geschrieben: Di 13. Jan 2026, 09:14 Du versuchst 3 Frames mit dem gleichen Namen zu erstellen. Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Ich kann ja keine 3 Frame-Variablen mit gleichem Namen anlegen. Das würde OOP ja nicht zulassen.
=>

Code: Alles auswählen

    FrameWithTStringGrid1 : TFrameWithTStringGrid;
    FrameWithTStringGrid2 : TFrameWithTStringGrid;
    FrameWithTStringGrid3 : TFrameWithTStringGrid;
Ich verstehe nur nicht warum 3 (dynamisch erzeugte) Objekte mit 3 verschiedenen Variablen-Namen denselben Objekt-Namen bekommen.
=>
Jorg3000 hat geschrieben: Di 13. Jan 2026, 09:08 ..falls du die Frames zur Entwurfszeit per IDE aufs Form gesetzt hast, sollte automatisch ein anderer Name (fortlaufende Nummerierung) gesetzt werden.
dj_leinad hat geschrieben: Di 13. Jan 2026, 09:14 Beim erstellen wird nicht automatisch der Name mit einer Zahl ergaenzt und dann durchnummeriert.
Ich arbeite sehr viel mit zur Laufzeit erzeugten Objekten, so ein "Fehler" ist mir aber bislang noch nicht unter gekommen. Daß man den Objekt-Namen händisch anpassen muß, ist mir halt völlig neu.

dj_leinad
Beiträge: 45
Registriert: Sa 1. Okt 2022, 05:27
OS, Lazarus, FPC: Win10 pro (Laz 4.3 / FPC 3.2.3)
CPU-Target: 64Bit
Wohnort: CH

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von dj_leinad »

Hallo Peter,
es wird der Name des Frames TFrameWithTStringGrid beim erstellen verwendet. Da wird nicht TFrameWithTStringGrid1/ -2/ -3 verwendet sondern der Name des Frame FrameWithTStringGrid. Du musst beim erstellen also selber dafuer sorgen dass dieser Name eineindeutig ist.

lg Daniel
Erfahrung heißt gar nichts. Man kann eine Sache auch 35 Jahre schlecht machen.

wp_xyz
Beiträge: 5344
Registriert: Fr 8. Apr 2011, 09:01

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von wp_xyz »

Der Variablenname eines Objektes hat nichts mit dem Wert der Eigenschaft "Name" zu tun: Unter ersterem kann man das Objekt im Quellcode ansprechen (so wie jede andere Variable, z.B "x := 1"), der letzere wird im wesentlichen nur für den Designmode und den Objektinspektor benötigt, damit der Benutzer die verschiedenen Objekte auseinander halten kann.

Die Eigenschaft "Name" ist beim Erzeugen zur Laufzeit normalerweise leer, im Designmode wird sie vom Designer mit dem Variablennamen vorbesetzt. Die Ausnahme ist TFrame, hier wird immer der direkt von der Klasse abgeleitete Name übergeben, ohne einen Nummernzusatz, der den Namen eindeutlich machen würde. Das ist m.E. ein Bug in Lazarus, ich habe einen Bug-Report geschrieben: https://gitlab.com/freepascal.org/lazar ... sues/41999 .

charlytango
Beiträge: 1221
Registriert: Sa 12. Sep 2015, 12:10
OS, Lazarus, FPC: Laz stable (2.2.6, 3.x)
CPU-Target: Win 32/64, Linux64
Wohnort: Wien

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von charlytango »

wp_xyz hat geschrieben: Di 13. Jan 2026, 13:54 Die Ausnahme ist TFrame, hier wird immer der direkt von der Klasse abgeleitete Name übergeben, ohne einen Nummernzusatz, der den Namen eindeutlich machen würde. Das ist m.E. ein Bug in Lazarus
ich habe gerade nachgesehen -- wenn ich mehrere Frames mit gleichem Typ verwende, setze ich .Name auf Nullstring

Code: Alles auswählen

  FrameWithTStringGrid1:= TFrameWithTStringGrid.Create(Self);
  with FrameWithTStringGrid1 do begin
    Name  := '';
    Parent:= Self;
  end;

PeterS
Beiträge: 188
Registriert: So 22. Feb 2015, 11:36
OS, Lazarus, FPC: L 4.4
CPU-Target: win32, win64

Re: TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von PeterS »

wp_xyz hat geschrieben: Di 13. Jan 2026, 13:54 Das ist m.E. ein Bug in Lazarus, ich habe einen Bug-Report geschrieben: https://gitlab.com/freepascal.org/lazar ... sues/41999 .
Vielen Dank !

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1731
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [resolved] TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von fliegermichl »

Ich hab das gerade mail versucht nachzuvollziehen.
Bei mir Lazarus 4.1 (rev lazarus_4_0-77-gc52a98dba2) FPC 3.2.2 x86_64-win64-win32/win64

Meine Frameklasse heisst TSimpleFrame
im OnCreate von TForm1 hab ich das stehen:

Code: Alles auswählen

procedure TForm1.FormCreate(Sender: TObject);
begin
  sf1 := TSimpleframe.Create(Application);
  sf1.Parent := self;
  sf2 := TSimpleframe.Create(Application);
  sf2.Parent := self;
  sf2.Top := sf1.Height + 10;
end;
Wenn ich da einen Haltepunkt draufsetze, heisst sf1 nach dem Erzeugen "Simpleframe" und sf2 "Simpleframe_1" und es gibt auch keine Fehlermeldung.

wp_xyz
Beiträge: 5344
Registriert: Fr 8. Apr 2011, 09:01

Re: [resolved] TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von wp_xyz »

Seltsam... Kannst du mal das Test-Projekt checken, das ich den Bug-Report beigefügt habe? Mit Laz 4.0 und 4.2 getested (und mit Laz/main sowieso) tritt der Fehler auf. Bzw. kannst du DEIN Test-Projekt hier posten?

Benutzeravatar
fliegermichl
Lazarusforum e. V.
Beiträge: 1731
Registriert: Do 9. Jun 2011, 09:42
OS, Lazarus, FPC: Lazarus Fixes FPC Stable
CPU-Target: 32/64Bit
Wohnort: Echzell

Re: [resolved] TFrame - Mehrfachverwendung in einem Formular führt zu Fehler "duplicate name"

Beitrag von fliegermichl »

Der Unterschied besteht im Owner des Frames.

Wenn ich Dein Projekt so compiliere wie es ist, tritt der Fehler bei mir auch auf.
Ändere ich die Zeile 42 von
F := TTestFrame.Create(self); nach
F := TTestFrame.Create(Application);

vergibt Lazarus den Namen wie in meinem Beispiel.

Antworten