Autor Beitrag
Tower
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Fr 07.03.03 15:01 
Hallo zusammen!

In meinem Projekt gibt es zig verschiedene Forms nach dem Schema Form<Nr>, also Form1, Form2, ... FormX.
Manche von diesen muss ich zur Laufzeit erzeugen, welche, das entscheidet sich erst während des Programmablaufs.

Normalerweise würde ich das ja in der Art...
ausblenden Quelltext
1:
Form12 := TForm12.Create;					

... machen.
Praktischerweise müsste jetzt sowas möglich sein wie:
ausblenden Quelltext
1:
tmpForm := ('TForm'+IntToStr(Nr)).Create;					


... klar, geht natürlich nicht.

Aber möglich ist das doch bestimmt irgendwie, oder...?
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 07.03.03 15:28 
Ja, du musst glaub ich mit GetMem zur Laufzeit eine Variable erzeugen, und dann über Variable as TForm darauf zugreifen, dann kannste glaub ich auch sowas mit Laufvariablen machen.

Oder Du nimmst einfach ein Array of TForm, das dürfte auch gehen.

Gruß
Tower Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 99



BeitragVerfasst: Fr 07.03.03 15:43 
Danke, aber das trifft leider nicht ganz mein Problem.

Das Abspeichern in einer Variable ist (zumindest bisher ;-) ) kein Problem. "tmpForm" hab ich nur der Einfachheit halber geschrieben, wirklich steht da schon folgendes:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
var
  MyForms: Array of TForm;
begin
  [...]
  MyForms[i] := ???.Create(Application);
  [...]
end


Und DAS ist das Problem: Was kommt hinter das ":=", wenn ich noch nicht weiß, welches Form erzeugt werden muss - und damit auch: den Konstruktor welcher Klasse ich aufrufen muss?

Wenn (vereinfacht gesagt) der Anwender "Form1" auswählt, das erzeugt werden soll, dann müsste da "... := Form1.Create" stehen, bei Form23 entsprechend "... := Form23.Create" usw. Und da ich das zur Entwicklungszeit noch nicht weiß, muss ich das irgendwie dynamisch lösen...
UGrohne
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Veteran
Beiträge: 5502
Erhaltene Danke: 220

Windows 8 , Server 2012
D7 Pro, VS.NET 2012 (C#)
BeitragVerfasst: Fr 07.03.03 15:56 
Brauchst Du denn unbedingt eine Variable, mit der Du später auf das Form noch zugreifen kannst?
Ansonsten kannste ja auch einfach ein Form1:=TForm1.Create.... machen, auch mit mehreren Instanzen, es ist halt schwieriger darauf zuzugreifen....

Vielleicht vereinfacht das Dein Problem ein bisschen..... ich überleg aber grad mal etwas weiter...

Gruß