Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Umschalten zwischen Formularen (https://www.delphipraxis.net/5519-umschalten-zwischen-formularen.html)

Master_BB 10. Jun 2003 06:41


Umschalten zwischen Formularen
 
Hy,
ich hab das Problem das ich nicht genau weiß was nun die beste lösung ist um von einem Formular per Knopfdruck ein anderes anzeigen zu lassen und das gerade geklickte verschwinden zu lassen.
Wenn ichs per Form1.Hide, Form2.Show mache kommt beim 2ten oder dritten umschalten zwischen den Formularen ein Fehler.
Wenn ich es mit create(self) bauen will gehts nicht kommt immer ein Fehler direkt beim Projektcode. Und die Lösung mit Visible True und False finde ich irgentwie schlecht. Kann mir einer helfen wie man das ordentlich machen kann, bzw wie macht ihr es?

r_kerber 10. Jun 2003 07:56

Ich schalte nicht zwischen Formularen um. Ich lege zunächst auf auf jede Form ein Panel. In diesem Panel baue ich dann das komplette Formular auf. Der Wechsel erfolgt durch Zuweisung von Panel.Owner. Hierzu gab es vor einiger Zeit mal einen Artikel im Entwickler. Wenn Du willst, kann ich Dir heute abend mal ein Code-Schnipsel zur Verfügung stellen!

roderich 10. Jun 2003 09:22

hi Rainer,

ich vermute mal einen Freudschen Verschreiber bei Dir, Du meinst Panel.Parent statt Panel.Owner, oder ?!?

Deine Idee ist echt genial einfach, bin echt bisher (8 Jahre Delphi) nicht drauf gekommen.

v. Grüße
Roderich

r_kerber 10. Jun 2003 09:35

Da könntest Du recht haben. Ich habe da sicher etwas verwechselt. Benötigt wird zwar beides, aber ich glaube, Wechsel läuft über Parent. Ich habe aber zu Zeit den Quellcode nicht vor mir liegen. Und wie gesagt, die Idee ist nicht von mir! (entweder aus "Der Entwickler" oder "Toolbox"

Master_BB 10. Jun 2003 15:18

hey rainer,
wäre echt schön wenn du mir nen prog schickst wo so umgeschaltet wird zwischen 2 formularen

am besten an meine mail addy Master_BB@gmx.de

THX für die Hilfe

Greetz
Master_BB

r_kerber 10. Jun 2003 16:52

Kein komplettes Programm aber einen Code-Schnipsel, der Dir hoffentlich weiter hilft:
Delphi-Quellcode:
procedure TfMain.aFehlerlisteExecute(Sender: TObject);
begin
  if pMain.ControlCount = 1 then
    pMain.Controls[0].Parent := TWinControl (pMain.Controls[0].Owner);
  fFehlerliste.pMain.Parent := pMain;
end;
Zur Erläuterung:
  • auf jedem Form gibt es als erstes ein Panel mit dem Namen pMain
  • in dem vorliegenden Beispiel soll anstelle des aktuellen Panels pMain das Panel pMain des Formulare fFehlerListe angezeigt werden
  • Vorher wird das aktuell gezeigte pMain seinem Eigentümer zurückgegeben.

Master_BB 10. Jun 2003 17:16

hm ich bin noch ziemlicher anfänger in delphi mach das erst seit ca 4 monaten. kannste nciht nen kleines programm schreiben wo du 2 formulare hast in dem einen nen label wo drin steht formular 1 und bei dem anderen nen label wo steht formular2 ? BITTE
ich muß es im ganzen sehn um es zu lernen

Stanlay Hanks 10. Jun 2003 17:21

Was auch noch gehen könnte wären frames. Nur so als Vorschlag.

r_kerber 10. Jun 2003 17:37

Liste der Anhänge anzeigen (Anzahl: 1)
Anfänger und dann die Enterprise-Version?

Stanlay Hanks 10. Jun 2003 17:53

Zitat:

Zitat von r_kerber
Anfänger und dann die Enterprise-Version?

Ich denke, das is doch jedem selber überlassen, oder :wink: Außerdem: Der eine kann sich das leisten, der andere nicht.

r_kerber 10. Jun 2003 17:57

@Stanlay: Ja die Welt ist nun mal ungerecht. :(

Stanlay Hanks 10. Jun 2003 18:00

Jaja, da hast du recht....Ich hab nur die SSL Version von D7 Pro :(
Aber um noch mal auf das Problem zu sprechen zu kommen. Wenn man das so mit den Panels macht, dann verändert man doch nur den Fenster Inhalt, und wechselt nicht zu einem anderen Fenster.

r_kerber 10. Jun 2003 18:04

Jein. Im Prinzip kann man auch die Menüs, Icon-Leisten und StatusBar übernehmen bzw. mergen. Ich finde dies wesentlich angenehmer zum Arbeiten als den Fenster-Wechsel. Aber das ist wohl Geschmackssache.

Stanlay Hanks 10. Jun 2003 18:18

Nicht nur Geschmackssache. Ich finde (also doch geschmack...hmmm :mrgreen:), dass z.B. ab und zu eigene Fenster wirklich nötig sind. Z.B. die ganzen Dialoge und so (Schriftarten, Drucken, Öffnen, Speichern) oder ein Optionenfenster.

Master_BB 10. Jun 2003 18:20

hm ja enterprise hab ich "billig" über einen freund beim vertrieb beim PC Großhandel bekommen. aber egal...
Ne das mit dem umschalten is krass. Teoretisch läuft bei dem Programm alles über die Leere Form3 wo dann einfach 1 udn 2 rüber geladen wird.
ich denk ich kann das gleich mal bei meinem Verwaltungsprogramm umändern. RIESEN THX nochmal

r_kerber 10. Jun 2003 18:23

Zitat:

Zitat von Master_BB
hm ja enterprise hab ich "billig" über einen freund beim vertrieb beim PC Großhandel bekommen

Jaja, Vitamin B. Könnte ich auch manchmal gebrauchen. :roll:

r_kerber 10. Jun 2003 18:26

Zitat:

Zitat von Stanlay Hanks
Ich finde .., dass z.B. ab und zu eigene Fenster wirklich nötig sind. Z.B. die ganzen Dialoge und so (Schriftarten, Drucken, Öffnen, Speichern) oder ein Optionenfenster.

Da gebe ich Dir völlig recht. Dafür nutze ich selbstverständlich auch eigene Dialog. Aber wenn's um reine Funktionalität geht, nehme ich die beschriebene Vorgehensweise (Bsp: Anzeige eine DB-Tabelle im DBGrid {eventuell auch ReadOnly}. Doppelclick auf einen Datensatz: es erscheint im selben Fensetr ein editierbares Formular!)

Master_BB 10. Jun 2003 18:34

hm ich habs gerade implementiert und bekomme jetzt immer einen
Stack-Überlauf

Stanlay Hanks 10. Jun 2003 18:37

Poste doch mal deinen Code.

Master_BB 10. Jun 2003 18:57

Das wechseln von Unit1 zu Unit2 läuft von Unit2 zu 1 kommt dann der fehler

Unit1 wo was drin is
Delphi-Quellcode:
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
 if Form7.pMain.ControlCount = 1 then
    Form7.pMain.Controls[0].Parent := TWinControl (Form7.pMain.Controls[0].Owner);
  Form2.pMain.Parent := pMain;
  Form7.Caption := Form1.Caption;
end;
Unit2 wo was drin is
Delphi-Quellcode:
procedure TForm2.BitBtn4Click(Sender: TObject);
begin
  if Form7.pMain.ControlCount = 1 then
    Form7.pMain.Controls[0].Parent := TWinControl (Form7.pMain.Controls[0].Owner);
  Form1.pMain.Parent := pMain;
  Form7.Caption := Form1.Caption;
  closefile(pf);
end;
Leer Unit7
Delphi-Quellcode:
procedure TForm7.FormShow(Sender: TObject);
begin
  if Form7.pMain.ControlCount = 1 then
    Form7.pMain.Controls[0].Parent := TWinControl (Form7.pMain.Controls[0].Owner);
  Form1.pMain.Parent := pMain;
  Form7.Caption := Form1.Caption;
end;
Fehler wird angezeigt hier
Delphi-Quellcode:
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm6, Form6);
  Application.CreateForm(TForm5, Form5);
  Application.CreateForm(TForm7, Form7);
  Application.Run;
end.                             //--HIER DER FEHLER STackÜberlauf
[edit=Daniel B]Center-Tags in Delphi-Tags umgewandelt. Wer macht denn sowas? :roll: :mrgreen: MfG Daniel B.[/edit]

r_kerber 10. Jun 2003 19:02

Versuche doch mal, das closefile (pf) an den Anfang zu stellen. Ansonsten debugge doch mach zeilenweise, damit Du die Anweisung feststellen kannst, bei der der Fehler passiert!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:50 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