![]() |
Zwischen verschidenen Formularen wechseln
Hallo,
Ich erstelle gerade ein Programm, welches aus mehreren Fenstern besteht, wobei immer nur eins sichtbar sein soll. Alle Formulare sind aufgereiht. Sozusagen durchnummeriert. Man kann immer von einem Formular zum nächsten oder eins zurück. (außer natürlich beim ersten und letzten Fenster des Programms) Im Moment habe ich nur die ersten beiden Formulare mit den zugehörigen Units. Beim klick auf "Weiter" im ersten Fenster wird folgendes aufgerufen:
Delphi-Quellcode:
D.h. ich mache das zweite Fenster aktiv und sichtbar sowie das erste inaktiv und unsichtbar. Das funktioniert auch aber:
procedure TForm1.Button3Click(Sender: TObject);
begin Profilfaecher.Form2.Visible:=true; Profilfaecher.Form2.Enabled:=true; Form1.Visible:=false; Form1.Enabled:=false; end; Ich habe, um die Eigenschaften Visible und Enabled vom zweiten Formular zu ändern einfach den Namen der 2. Unit (Profilfaecher) unter "uses" der 1. Unit eingetragen. Da ich aber auch das erste Fenster auch aus dem zweiten heraus schließen möchte, habe ich auch den Namen der 1. Unit in die uses-Spalte der 2. Unit geschrieben. Aber das funktioniert nicht: Zitat:
Wie kann ich am besten Unit 1 beibringen, was Form 2 ist (ohne das ich immer Profilfaecher davor schreiben muss) und wie kann ich auch aus Unit 2 auf die Funktionen und Eigenschaften von Form1 zugreifen, ohne dass eine Zitat:
MfG |
Re: Zwischen verschidenen Formularen wechseln
trage es ab der 2.Unit unter implementation in die Uses-Klausel ein!
|
Re: Zwischen verschidenen Formularen wechseln
Was meinst du genau mit "es"?
Edit: hab es rausgefunden... du meinst die einzelnen Units. Funzt perfekt. Danke |
Re: Zwischen verschidenen Formularen wechseln
Eine Methode:
- Du brauchst eine Hauptform (kannst du auf Visible := FALSE setzen), die all deine anderen Forms per uses unter implementation einbindet. - In der Hauptform legst du unter public ein Array[0..AnzahlAnForms] of TForm an. - Du machst in FormCreate eine Schleife, die jede Form als Member des Arrays erzeugt:
Delphi-Quellcode:
- Jede Form wird von deinem Hauptform unter implementation per uses eingebunden
for i := Low(FormArray) to High(FormArray) do
begin case i of 0: FormArray[i] := TFormIrgendwas.Create (Self); 1: FormArray[i] := TFormNochwas.Create (Self); ... end; FormArray[i].Tag := i; end; - Nun kannst du auf jeder Form sowas in der Art machen:
Delphi-Quellcode:
- Am Ende nicht vergessen, die Forms im Array wieder freizugeben:
procedure TFormIrgendwas.ButtonPrevClick(Sender: TObject);
begin Hauptform.FormArray[Self.Tag].Visible := FALSE; // Du mußt hier noch auf Unterlauf (< 0) prüfen Hauptform.FormArray[Self.Tag - 1].Visible := TRUE; { oder Hauptform.FormArray[Self.Tag].Hide; Hauptform.FormArray[Self.Tag - 1].Show; } end; procedure TFormIrgendwas.ButtonNextClick(Sender: TObject); begin Hauptform.FormArray[Self.Tag].Visible := FALSE; // Du mußt hier noch auf Überlauf (> MaxForms) prüfen Hauptform.FormArray[Self.Tag + 1].Visible := TRUE; { oder Hauptform.FormArray[Self.Tag].Hide; Hauptform.FormArray[Self.Tag + 1].Show; } end;
Delphi-Quellcode:
- Noch was: Wenn du die anderen Forms unter den Projektoptionen automatisch erzeugst, nimm die alle (bis auf die Hauptform) raus.
for i := Low(FormArray) to High(FormArray) do
FreeAndNil (FormArray[i]); Nicht getestet ... |
Re: Zwischen verschidenen Formularen wechseln
Phu... :shock: danke, dass du dir die Mühe gemacht hast.
Aber das, was ich da gerade zusammen bastle, wird bewertet und ich kann meinem Lehrer schlecht vermitteln, dass ich das mir autodidaktisch beigebracht habe ^^ Ich durchschaue es nämlich noch nicht ganz. :oops: Nimms mir nicht übel, aber das ist zu hoch gegriffen. Zumal ich mittlerweile mir Krokos Erklärung weiter gekommen bin. Trotzdem danke. |
Re: Zwischen verschidenen Formularen wechseln
Das Konzept davon ist, dass du in deinem Hauptformular ein Array hast, welches die ganzen Unterformulare in einer Art Liste aufnimmt, wo du sie verwalten kannst, ohne auf jeder Form einzeln wissen zu müssen, welches Formular du gerade hast, was das letzte oder was nächste ist. Das wird eben über den Index geregelt.
Die Schleife in Hauptform.FormCreate erstellt je nach Durchlauf das passende Formular und weißt ihm einen Tag-Wert zu, um sie später wieder identifizieren zu können. Die Button-Funktionen verstecken das jeweils aktuelle Formular und zeigen das letzte (-1) bzw. das nächste (+1) an. Wenn du 3, 4 oder mehr Forms hast, blickst du mit dem anderen Konzept irgendwann nicht mehr durch, welches Formular das nächste und letzte ist. Das wird hier verhindert, indem jedes Formular das selbst regelt. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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