![]() |
Weitere Fenster (Formulare) öffnen - Wie?
Guten Abend,
ich will, dass wenn ich auf einen Button klicke, ein neues Form geladen wird. Während dieses Formular zu sehen ist, darf es nicht möglich sein, dass "Hauptformular" zu nutzen. Ich weiß leider nur bruchteilhaft wie das gehen soll. Ich wäre für eine genaue Anleitung/Link wo's erklärt wird sehr dankbar. |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Annahme: In Fom2Unit.pas liegt dein zweites Formular TForm2:
Delphi-Quellcode:
uses Form2Unit;
procedure Button1Click(Sender: TObject) var NewForm: TForm2; begin NewForm := TForm2.Create(self); NewForm.ShowModal; NewForm.Free; end; |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Danke für die schnelle Antwort.
Leider bekomme ich immer Exception beim Aufruf... Code Mainform:
Delphi-Quellcode:
Code Editor-Form:
unit mTest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Menus, StdCtrls; type TMainform = class(TForm) Button1: TButton; Button2: TButton; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Mainform: TMainform; implementation uses mTest2; {$R *.dfm} procedure TMainform.Button1Click(Sender: TObject); var pr1 : TEditor; begin pr1 := TEditor.Create(self); pr1.ShowModal; pr1.Free; end; procedure TMainform.Button2Click(Sender: TObject); begin ShowMessage('Blub!'); end; end.
Delphi-Quellcode:
Formstyle "Mainform" = fsMidForm
unit mTest2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TEditor = class(TForm) Memo1: TMemo; Button1: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Editor: TEditor; implementation {$R *.dfm} procedure TEditor.FormClose(Sender: TObject; var Action: TCloseAction); begin Action:= caFree; end; procedure TEditor.Button1Click(Sender: TObject); begin Close; end; end. Formstyle "Editor" = fsMidChild Hinweis: Unter "Proejekt" -> "Optionen" -> "Formulare" befindet sich "Editor" auf der rechten Seite, wird also nicht autom. mitgeladen - was auch sein soll. |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Entweder gibt sich das Formular selbst Frei
Delphi-Quellcode:
oder du gibst es frei
Action:= caFree;
Delphi-Quellcode:
Da du das Formular Modal anzeigen willst um evtl. irgendwelche Rückgabewerte zu erhalten würde ich sagen du leerst einfach den Eventhandler TEditor.FormClose, damit sich das Formular nicht selbst freigibt.
pr1.Free;
|
Re: Weitere Fenster (Formulare) öffnen - Wie?
Danke auch für deine Antwort!
Ich habe so eben eine neue Anwendung erstellt. Code "Form1" (=Main-Form):
Delphi-Quellcode:
Code "Form2" (=weireres Fenster):
unit mTest;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, mTest2; type TForm1 = class(TForm) btForm2: TButton; btMSG: TButton; procedure btMSGClick(Sender: TObject); procedure btForm2Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.btMSGClick(Sender: TObject); begin ShowMessage('Blub'); end; procedure TForm1.btForm2Click(Sender: TObject); var NewForm: TForm2; begin NewForm := TForm2.Create(self); NewForm.ShowModal; NewForm.Free; end; end.
Delphi-Quellcode:
Wenn ich "FormStyle" auf "fsnormal" lasse, klappt es auch, wie es soll :)
unit mTest2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm2 = class(TForm) btClose: TButton; procedure btCloseClick(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.dfm} procedure TForm2.btCloseClick(Sender: TObject); begin Close; end; end. |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Argh - ich blicke nicht mehr durch!
Nachdem ich den Beitrag verfasst hatte und den FormStyle wieder auf "fsNormal" zurück gestellt hatte, kommt auch hier ein Except. ---------- Update: Wenn ich Delphi schließe und neu lade, geht alles. Irgendwie führt er den Prozess, trotz per "STRG + F2" aus bzw. hat was kaputt gemacht :/ |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Der Code schaut normal aus.
Kannst Du evtl. ein kleines Beispielprogramm posten, so das wir das auch nachvollziehen können? |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Muß man, wenn man mit ShowModal arbeitet nicht auch ModalResult auf -1 setzen? Oder bin ich im falschen Zusammenhang...
Jens |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Zitat:
Interessant ist eben: Lade ich das Programm frisch - läuft alles. Ändere ich den Style auf ffMDI... -> Fehler. Drücke ich STRG + F2 um das Programm zurück zu setzen und stelle den Style auf den Ausgangswert, kommt der Fehler immer noch - obwohl nichts anderes geändert. Hier muss ich erst das Projekt schließen und neu laden. |
Re: Weitere Fenster (Formulare) öffnen - Wie?
kann man ein MdiChildWindow überhaupt modal anzeigen lassen?
läuft es denn wenne es nur mit Show anstatt mit ShowModal aufrufst? Also wenn du nicht fsNormal sondern MdiChild nimmst? mfg emploi |
Re: Weitere Fenster (Formulare) öffnen - Wie?
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:22 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