Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi belibig viele Forms zur Laufzeit erzeugen (https://www.delphipraxis.net/112868-belibig-viele-forms-zur-laufzeit-erzeugen.html)

5etH 28. Apr 2008 15:58


belibig viele Forms zur Laufzeit erzeugen
 
Hallo zusammen,

ich bin momentan dabei ein Programm zu schreiben, was eine bestimmte Anzahl an Forms erzeugt. Leider stellt es sich als schwierig heraus diese zur Laufzeit zu erstellen, da ich sie einfach durchnummerieren möchte und das mit den Variablen nicht so klappt.

Meine frage nun: Was oder Wie muss ich diese Forms erzeugen, sodass ich dynamisch Forms erstellen kann und ich sie nicht vordefinieren muss.

Schonmal vielen Dank im vorraus
euer 5etH

Matze 28. Apr 2008 16:02

Re: belibig viele Forms zur Laufzeit erzeugen
 
Hallo,

leere Formulare kannst du so erzeugen:

Delphi-Quellcode:
const
  FORM_NUM = 6;
var
  i: Integer;
  MyForms: array of TForm;

Setlength(MyForms, FORM_NUM);

for i := 0 to FORM_NUM - 1 do
begin
  MyForms[i] := TForm.Create(self);
  MyForms[i].Name := 'Form' + IntToStr(i);
  MyForms[i].Show;
end;
Die Formulare sind dann alle in einem Array enthalten, damit du leicht auf diese zugreifen und sie auch wieder freigeben kannst.
Ungetestet. ;)

Grüße

Neutral General 28. Apr 2008 16:06

Re: belibig viele Forms zur Laufzeit erzeugen
 
@Matze: In Delphi werden Zeichenketten mit einem + verbunden :stupid:

Die Muhkuh 28. Apr 2008 16:08

Re: belibig viele Forms zur Laufzeit erzeugen
 
Und man sollte auch auf das Array zugreifen und die Forms dort erstellen :stupid:

5etH 28. Apr 2008 16:08

Re: belibig viele Forms zur Laufzeit erzeugen
 
also momentan sieht unseres so aus und wir haben noch einen Fehler der im code makiert ist



Delphi-Quellcode:
procedure newwin();
var  i: Integer;
  MyForms: array of TForm;
  const
  FORM_NUM = 20;
begin
setlength(MyForms, FORM_NUM);

for i := 0 to FORM_NUM - 1 do
begin
  MyForms[i] := TForm.Create(self); // undefinierter bezeichner 'self'
  MyForms[i].Name := 'Form ' + IntToStr(i);
  MyForms[i].Show;
  inc(FORM_NUM);
end;
end;
end.
[EDIT] wird jetzt auf das array angesprochen

Matze 28. Apr 2008 16:09

Re: belibig viele Forms zur Laufzeit erzeugen
 
Huch, da waren einige Fehlerchen drinnen. :stupid: Du müsstest nochmals die korrigierte Fassung von oben nehmen.

Mit dem "self" bin ich mir nicht mehr ganz sicher, evtl war's auch "nil".

Edit: Bei mir gehen sowohl "self" als auch "nil".

Die Muhkuh 28. Apr 2008 16:11

Re: belibig viele Forms zur Laufzeit erzeugen
 
Oder nimm "Application" anstatt self, Unit forms muss eingebunden sein.

[edit] Was soll das inc(FORM_NUM);? :shock: [/edit]

Nuclear-Ping 28. Apr 2008 16:13

Re: belibig viele Forms zur Laufzeit erzeugen
 
Oder mach "procedure newwin()" zum Mitglied von TForm1. Dann klappt das auch mit dem Self ... Das riecht doch schonwieder stark nach mangelndem Grundlagenwissen ... :roll:

Und Edit meint grad, dass dein Array in der Prozedur nichts zu suchen hat. Weil dann kannste dir das auch ganz schenken, weil das Array gibts nur solange bis die Prozedur durchlaufen ist ...

Schaltet die Generation von heute eigentlich auch mal das Hirn beim Programmieren ein oder geht über Copy & Paste nicht mehr viel hinaus ...? Meine Güte ...


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:26 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