Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Weitere Fenster (Formulare) öffnen - Wie? (https://www.delphipraxis.net/28117-weitere-fenster-formulare-oeffnen-wie.html)

Whistler 19. Aug 2004 21:22


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.

Bernhard Geyer 19. Aug 2004 21:26

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;

Whistler 19. Aug 2004 21:34

Re: Weitere Fenster (Formulare) öffnen - Wie?
 
Danke für die schnelle Antwort.
Leider bekomme ich immer Exception beim Aufruf...

Code Mainform:
Delphi-Quellcode:
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.
Code Editor-Form:
Delphi-Quellcode:
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 "Mainform" = fsMidForm
Formstyle "Editor" = fsMidChild

Hinweis:
Unter "Proejekt" -> "Optionen" -> "Formulare" befindet sich "Editor" auf der rechten Seite, wird also nicht autom. mitgeladen - was auch sein soll.

Bernhard Geyer 19. Aug 2004 21:39

Re: Weitere Fenster (Formulare) öffnen - Wie?
 
Entweder gibt sich das Formular selbst Frei
Delphi-Quellcode:
Action:= caFree;
oder du gibst es frei
Delphi-Quellcode:
pr1.Free;
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.

Whistler 19. Aug 2004 21:43

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:
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.
Code "Form2" (=weireres Fenster):
Delphi-Quellcode:
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.
Wenn ich "FormStyle" auf "fsnormal" lasse, klappt es auch, wie es soll :)

Whistler 19. Aug 2004 21:46

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 :/

Bernhard Geyer 20. Aug 2004 07:02

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?

plumper 20. Aug 2004 07:07

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

Whistler 20. Aug 2004 12:44

Re: Weitere Fenster (Formulare) öffnen - Wie?
 
Zitat:

Zitat von Bernhard Geyer
Der Code schaut normal aus.

Kannst Du evtl. ein kleines Beispielprogramm posten, so das wir das auch nachvollziehen können?

Der Code des Programms steht genau 1:1 über deinem Posting.
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.

emploi 20. Aug 2004 12:48

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


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:08 Uhr.
Seite 1 von 2  1 2      

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