Moin,
also das wichtige ist erst mal zu verstehen was man möchte: Du möchtest eine bestimmte Anzahl Formulare. Zum Beispiel 42
dann musst du auch 42x ein Formular erstellen. Wie erstellt man ein Formular? Indem man
TForm.Create aufruft. Oder in deinen Fall
TForm5, dabei ist
TForm5 quasi
TForm: Nämlich kann
TForm5 alles das was auch
TForm kann. Also ein (leeres) Fenster anzeigen.
TForm5 ist nur eine Erweiterung von
TForm und bietet zum Beispiel einige platzierte Komponenten an.
Das heißt, wenn du 42 Formulare haben willst, musst du 42x
TForm5.Create aufrufen. Nun bei dir ist die Schleife anfangs falsch angesetzt:
Du erstellst ein Forumlar (du rufst 1.
TForm5.Create auf) und setzt dann in einer Schleife den linken Abstand der Variable
Form5. Nun hat allerdings
Form5 gar nichts mit mit deinen neuen Fenster zu tun. Das ist nämlich eine globale Variable die irgendwo definiert ist, und beschrieben wird, wenn man das Fenster von Delphi automatisiert öffnen lassen will.
Man kann aber auch so etwas machen:
Delphi-Quellcode:
var
foobar : TForm5;
procedure foo;
var
form : TForm5;
begin
form := TForm5.Create(nil);
try
foobar.ShowModal();
finally
form.Free;
end;
end;
Jetzt benutze ich foobar, was genauso wie Form5 definiert ist, obwohl nirgendswo es erstellt wurde.
Eventuell wurde irgendwo ein Wert drin gespeichert, aber das wissen wir hier nicht. Deshalb sollte man globale Variablen immer vermeiden (zu nutzen).
Außerdem das
with-Konstrukt: Es gibt das Lager, welches es hasst und das Lager welches es gerne nutzt. Du selber musst entscheiden, wie häufig und wo du
with benutzt, aber dann sollte es übrigens richtig geschehen:
Delphi-Quellcode:
with x do
begin
// Hier kann man das x. jetzt sparen
end;
Du hast da jetzt für das x einfach
TForm5.Create(...) geschrieben, alles soweit wunderbar, aber dann benutzt du da drin die Variable
form5. Erstens steht die neue Form nicht da drin (wo sollte das denn gesehen) und zweitens könnte man sich das
with sparen, wenn man sowieso nicht die Features nutzt.
Ein letztes Wort zur
Form5: Es gibt zwei Stellen, wo gerne darauf zurückgegriffen wird:
Delphi-Quellcode:
procedure TForm5.DoFoo;
begin
Form5.Caption := 'Fooooooooo bar :D';
end;
In diesem Fall, setzt du die Caption von
Form5, aber das kann alles sein. Ein Beispiel:
Delphi-Quellcode:
procedure TWoanders.FooWindow;
var
frm : TForm5;
begin
frm := TForm5.Create(nil);
try
frm.DoFoo;
finally
frm.Free;
end;
end;
Jetzt wird von dem Objekt frm die Methode DoFoo aufgerufen. Allerdings steht in frm ein ganz anderes Fenster, wie in in Form5. Das ist entweder leer (= nil) oder mit einem anderen Fenster gefüllt. Wie setzt man dann die Caption? Einfach weglassen:
Delphi-Quellcode:
procedure TForm5.DoFoo;
begin
Caption := 'Fooooooooo bar :D';
end;
Das ist die kurze Schreibweise für:
Self.Caption := 'Fooooooooo bar :D';
Dabei sagt das
Self. aus:
Ich bin gemeint.
Mal ein Beispiel aus den Leben gegriffen: Fritz möchte eine Spritztour machen. Natürlich kann mehrere Fritze geben, und jetzt kann Fritz sagen:
Zitat:
Hej Fritz (er meint sich selber) will ne Spritztour machen.
Jetzt musst du hoffen, dass "Fritz" mit diesem speziellen Fritz assoziiert wird, ansonsten wird irgendein anderer Fritz eine Spritztour machen. Stattdessen kannst du aber sagen:
Code:
Hej! Ich will ne Spritztour machen.
Die andere Möglichkeit
Form5 zu verwenden wäre, so ähnlich wie du das gemacht hast:
Delphi-Quellcode:
Form5 := TForm5.Create();
...
Da kann man aber wunderbar lokale Variablen verwenden (siehe über mir). Außerdem was passiert, wenn in Form5 was wichtiges drin Stand? Das ist dann auf jeden Fall weg.
Es gibt einen Grund, warum man dennoch die globale Variable nutzen kann: Wenn das Formular bereits erstellt ist (so ist das automatisch bei Delphi der Fall) kann man direkt darauf zugreifen. Aber so kann man auch maximal ein Fenster speichern.
Man könnte das umgehen, indem man eine private/öffentliche (!= globale) Variable erstellt und dann beim Erstellen des Formulars die nötigen Unterformulare auch zu erstellen. So kann man mehrere Fenster speichern, und ist die globale Variable los geworden.
MfG
Fabian
PS: Ich hoffe das stimmt soweit alles!