![]() |
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? |
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!
|
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 |
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"
|
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 |
Kein komplettes Programm aber einen Code-Schnipsel, der Dir hoffentlich weiter hilft:
Delphi-Quellcode:
Zur Erläuterung:
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;
|
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 |
Was auch noch gehen könnte wären frames. Nur so als Vorschlag.
|
Liste der Anhänge anzeigen (Anzahl: 1)
Anfänger und dann die Enterprise-Version?
|
Zitat:
|
@Stanlay: Ja die Welt ist nun mal ungerecht. :(
|
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. |
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.
|
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.
|
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 |
Zitat:
|
Zitat:
|
hm ich habs gerade implementiert und bekomme jetzt immer einen
Stack-Überlauf |
Poste doch mal deinen Code.
|
Das wechseln von Unit1 zu Unit2 läuft von Unit2 zu 1 kommt dann der fehler
Unit1 wo was drin is
Delphi-Quellcode:
Unit2 wo was drin is
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;
Delphi-Quellcode:
Leer Unit7
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;
Delphi-Quellcode:
Fehler wird angezeigt hier
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;
Delphi-Quellcode:
[edit=Daniel B]Center-Tags in Delphi-Tags umgewandelt. Wer macht denn sowas? :roll: :mrgreen: MfG Daniel B.[/edit]
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 |
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