![]() |
AW: Form aufrufen und anpassen
Moin,
also das wichtige ist erst mal zu verstehen was man möchte: Du möchtest eine bestimmte Anzahl Formulare. Zum Beispiel 42 :stupid: 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:
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).
var
foobar : TForm5; procedure foo; var form : TForm5; begin form := TForm5.Create(nil); try foobar.ShowModal(); finally form.Free; end; end; 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:
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.
with x do
begin // Hier kann man das x. jetzt sparen end; Ein letztes Wort zur Form5: Es gibt zwei Stellen, wo gerne darauf zurückgegriffen wird:
Delphi-Quellcode:
In diesem Fall, setzt du die Caption von Form5, aber das kann alles sein. Ein Beispiel:
procedure TForm5.DoFoo;
begin Form5.Caption := 'Fooooooooo bar :D'; end;
Delphi-Quellcode:
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:
procedure TWoanders.FooWindow;
var frm : TForm5; begin frm := TForm5.Create(nil); try frm.DoFoo; finally frm.Free; end; end;
Delphi-Quellcode:
Das ist die kurze Schreibweise für:
procedure TForm5.DoFoo;
begin Caption := 'Fooooooooo bar :D'; end;
Delphi-Quellcode:
Dabei sagt das Self. aus: Ich bin gemeint.
Self.Caption := 'Fooooooooo bar :D';
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:
Code:
Die andere Möglichkeit Form5 zu verwenden wäre, so ähnlich wie du das gemacht hast:
Hej! Ich will ne Spritztour machen.
Delphi-Quellcode:
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.
Form5 := TForm5.Create();
... 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! |
AW: Form aufrufen und anpassen
Hallo,
okay Danke. Ich denke das verstehe ich soweit. Es fällt mir gerade nur schwer das in meinen Code zu basteln. Nochmal schnell zur Erklärung. Unit2, von der ich Unit5 aufrufe, sieht so aus: Label1 Button1 Label2 Button2 Label3 Button3 . . . . . . Durch eine Doppelklick auf Label öffnet sich eine Maske wo ich den Namen des Labels eintragen muss. Mit einem Klick auf den nebenstehenden Button öffnet sich dann Unit5 (Form5) deren Name dann praktisch der Inhalt von Label sein soll damit das gnaze später einen Bezug hat. Das ist das warum ich Unit5 mehrer male öffnen können muss. In meinem Code ist das nun also "procedure button1.click....." Du hast jetzt hier "procedure foo" verwendet. Was genau bewirkt das? Kann ich das uaf den Button übernehmen? Ich weiß es ist kompliziert aber ich hab schon gefühlte 100 mal alle Tutorials im Inet gelesen und fühl mich trotzdem nicht schlauer was die programmiererei angeht! Grüße Sascha |
AW: Form aufrufen und anpassen
Moin Sascha
Zitat:
Zitat:
MfG Fabian |
AW: Form aufrufen und anpassen
wie meinst du "speichern"???
|
AW: Form aufrufen und anpassen
Sicher in einer Eigenschaft, die in der Form deklariert wird...
So etwa: TheForm.CallComponent := MyControl; TheForm.Show; |
AW: Form aufrufen und anpassen
Genau so. Du legst eine Variable für das Formular an, und speicherst da drin zu welchen Edit es gehört.
MfG Fabian |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:31 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