AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Zwischen verschidenen Formularen wechseln
Thema durchsuchen
Ansicht
Themen-Optionen

Zwischen verschidenen Formularen wechseln

Ein Thema von olfrygt · begonnen am 26. Jan 2008 · letzter Beitrag vom 26. Jan 2008
Antwort Antwort
olfrygt

Registriert seit: 13. Jan 2008
11 Beiträge
 
Turbo Delphi für Win32
 
#1

Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 20:35
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:
procedure TForm1.Button3Click(Sender: TObject);
begin
 Profilfaecher.Form2.Visible:=true;
 Profilfaecher.Form2.Enabled:=true;
 Form1.Visible:=false;
 Form1.Enabled:=false;
end;
D.h. ich mache das zweite Fenster aktiv und sichtbar sowie das erste inaktiv und unsichtbar. Das funktioniert auch aber:
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:
[Pascal Fataler Fehler] Profilfaecher.pas(7): F2047 Zirkuläre Unit-Referenz auf 'Profilfaecher'
Die Katze beißt sich also irgendwie in den Schwanz ^^

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:
Zirkuläre Unit-Referenz
eintritt?

MfG
  Mit Zitat antworten Zitat
Benutzerbild von Kroko1999
Kroko1999

Registriert seit: 21. Apr 2005
Ort: Spremberg
455 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 20:38
trage es ab der 2.Unit unter implementation in die Uses-Klausel ein!
Da sprach der Stumme zum Blinden: "Du wirst sehen ..."
oder
Wer lesen kann, ist klar im Vorteil!
  Mit Zitat antworten Zitat
olfrygt

Registriert seit: 13. Jan 2008
11 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 20:44
Was meinst du genau mit "es"?

Edit: hab es rausgefunden... du meinst die einzelnen Units. Funzt perfekt. Danke
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#4

Re: Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 20:45
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:
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;
- Jede Form wird von deinem Hauptform unter implementation per uses eingebunden
- Nun kannst du auf jeder Form sowas in der Art machen:
Delphi-Quellcode:
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;
- Am Ende nicht vergessen, die Forms im Array wieder freizugeben:
Delphi-Quellcode:
for i := Low(FormArray) to High(FormArray) do
  FreeAndNil (FormArray[i]);
- Noch was: Wenn du die anderen Forms unter den Projektoptionen automatisch erzeugst, nimm die alle (bis auf die Hauptform) raus.

Nicht getestet ...
  Mit Zitat antworten Zitat
olfrygt

Registriert seit: 13. Jan 2008
11 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 21:37
Phu... 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.
Nimms mir nicht übel, aber das ist zu hoch gegriffen. Zumal ich mittlerweile mir Krokos Erklärung weiter gekommen bin.

Trotzdem danke.
  Mit Zitat antworten Zitat
Nuclear-Ping
(Gast)

n/a Beiträge
 
#6

Re: Zwischen verschidenen Formularen wechseln

  Alt 26. Jan 2008, 22:13
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:26 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz