@McReier: Ich kann mich noch daran erinnern, dass der Umgang mit einer zweiten Form in einem Projekt, für mich damals ein kleiner Meilenstein war. Darum wollt ich dir ein Tutorial empfehlen, zum Umgang mit einer zweiten Form. Nach 15Minuten Recherche im Netz habe ich für dein Problem nicht wirklich was Brauchbares gefunden. Daher versuche ich dir ein kleines Beispiel zu geben, was du dann für dein aktuelles Projekt entsprechend umnutzen kannst (generell stimme ich mit M.Fuchs jedoch überein):
- Neues Projekt erstellen -> Anwendung
- jetzt unter Datei -> neues Formular ein zweites Formular erstellen
- nun hast du zwei Formulare (Form1, Form2) in der jeweiligen Unit1 bzw. Unit2
- da Form1 die HauptForm darstellen soll, mit der dann die Form2 angezeigt werden soll, muss noch bei Unit1 in die Uses-clause die Unit2 eingefügt werden z.B:
Code: Alles auswählen
unit Unit1;
...
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Unit2;
- jetzt fügst du noch einen Button auf die Form1 ein (in der Komponentenpalette den TButton auswählen und durch ein Klick zur Form1 zufügen)
- nun erstellst du eine Procedure zum Ereignis eines Button-Klicks, indem du einfach auf den neu erstellen Button doppelklickst
- es wird die Procedure TForm1.Button1Click(Sender: TObject) im Quellcode der Unit1 erstellt
- der Buttonklick soll die Form2 öffnen, daher musst du einfach noch den Code dazu schreiben "Form2.Showmodal"
- der Code in Unit1 sollte jetzt so aussehen:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Showmodal;
end;
- Jetzt hast du ein Projekt mit 2 Formen (in einer jeweils separaten Unit), welches jetzt gestartet werden kann
Nun willst du noch Variablen in beiden Units nutzen. Man könnte globale Variablen in der Unit2 deklarieren. Damit hättest du Zugriff in der Unit1 und Unit2 auf ein und die selbe Variable (da in der Unit1 unter uses die Unit2 mit einbunden wurde). Dies ist aber kein guter Programmierstil, da man schnell bei größeren Projekten nicht mehr weiss, was die einzelnen Variablen für eine Bedeutung haben bzw. wo man überall darauf zugreift (Fehlerquote erhöht sich).
Besser ist es lokale Variablen zu nutzen, diese als Property in einer Klasse oder hilfsweise als Variable in einer Klasse zu definieren.
Als Beispiel könnte man eine Telefonnummervervollständigung (Telefonnummer in der Hauptform, Vorwahl in der Form2 einzugeben) machen:
- müsstest auf die Form1 noch ein TEdit und ein TLabel platzieren
- auf die Form2 ein TEdit und ein TButton
- im Objektinspektor die Eigenschaft "Caption" vom TButton ändern auf "Fertig"
- im Quellcode von Unit2 fügst du noch eine Variable in die Klasse TForm2 unter "public", mit dem Namen "Telefonnummer" von Typ String, ein:
Code: Alles auswählen
TForm2 = class(TForm)
Edit1: TEdit;
Button1: TButton;
private
{ private declarations }
public
{ public declarations }
Telefonnummer: String; //hier könnten auch noch andere Variablen, Properties,
//Methoden (Funktionen/Proceduren) etc. eingefügt werden
end;
Jetzt erstellst du wieder die Procedure für das Ereignis TForm2.Buttonklick und schreibst dort noch die Zuweisung für die Vervollständigung der Telefonnummer und Schließen der Form:
Code: Alles auswählen
procedure TForm2.Button1Click(Sender: TObject);
begin
Telefonnummer:=Edit1.Text+' / '+Telefonnummer;
Close;
// Hier könnte auch folgendes stehen (da Button1Click eine Procedure von
// TForm2 ist, sind jedoch auch Zugriffe auf alle Bestandteile der Klasse ohne
// Klassenbezeichner möglich):
Form2.Telefonnummer:=Form2.Edit1.Text+' / '+Form2.Telefonnummer;
Form2.Close;
// Der Zugriff auf "Form2" sollte vermieden werden, da so immer nur auf
// Form2 und nicht auf eine beliebige Instanz dieser Klasse zugegriffen wird!
// Besser wäre da (so sind mehrere Instanzen der Klasse möglich):
Self.Telefonnummer:=Self.Edit1.Text+' / '+Self.Telefonnummer;
Self.Close;
end;
- nun schreibst du noch folgenden Code in Form1.Button1klick:
Code: Alles auswählen
procedure TForm1.Button1Click(Sender: TObject);
begin
Form2.Telefonnummer:=Edit1.Text;
Form2.Showmodal;
Label1.Caption:=Form2.Telefonnummer;
//hier könnte wieder Form1. oder besser Self. stehen:
// Form2.Telefonnummer:=Self.Edit1.Text;
// Form2.Showmodal;
// Self.Label1.Caption:=Form2.Telefonnummer;
end;
Jetzt kannst du das Projekt starten und einmal als Telefonnummer "123456" in Edit1 der Form1 eingeben, Button klicken. Jetzt als Vorwahl "0987" in Edit1 der Form2 eingeben und Button klicken. Im Label1 der Form1 sollte die Telefonnummer mit Vorwahl "0987 / 123456" stehen.
Ich hoffe, das hilft dir! Viel Erfolg
Alle Anderen sind herzlich dazu eingeladen, Alternativen und Ergänzungen zu posten und somit dieses Forum etwas schlauer zu machen! Lazarus mit Freepascal eignet sich sehr für Einsteiger, dieses sollte beachtet und entsprechend Rücksicht (auch für nachfolgende Leser) genommen werden!