Hallo WIng2005,
ich bin mir immer noch unsicher, ob ich Deine Frage richtig verstanden habe. Ich arbeite bevorzugt mit einer Lösung wo das Fenster selber für die Erstellung und Zerstörung zuständig ist.
Mal ein Beispiel:
Zuerst die Class-
Unit für die Daten ist nicht besonderes nur zum Spielen.
Delphi-Quellcode:
unit uPersonenKlasse;
interface
uses
Classes;
type
THPLPersonen=
Class (TObject)
private
FVorName:
String;
FNachName:
String;
procedure GetFNachName(
const Value:
String);
procedure GetFVorName(
const Value:
String);
function SetFNachName:
String;
function SetFVorName:
String;
public
property VorName:
String read SetFVorName
write GetFVorName;
property NachName:
String read SetFNachName
write GetFNachName;
End;
implementation
{ THPLPersonen }
procedure THPLPersonen.GetFNachName(
const Value:
String);
begin
if Value <> FNachName
then
begin
FNachName:= Value
end;
end;
procedure THPLPersonen.GetFVorName(
const Value:
String);
begin
if Value <> FVorName
then
begin
FVorName:= Value
end;
end;
function THPLPersonen.SetFNachName:
String;
begin
result:= FNachName;
end;
function THPLPersonen.SetFVorName:
String;
begin
result:= FVorName;
end;
end.
So nun das Hauptformular:
Delphi-Quellcode:
unit frmHauptFenster;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
uPersonenKlasse,
uDynamischesFenster;
type
TfrmMainForm =
class(TForm)
edVorName: TEdit;
edNachName: TEdit;
btFormOeffnen: TButton;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btFormOeffnenClick(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
FPersonen: THPLPersonen;
end;
var
frmMainForm: TfrmMainForm;
implementation
{$R *.dfm}
procedure TfrmMainForm.btFormOeffnenClick(Sender: TObject);
begin
FPersonen.VorName:= edVorName.Text;
FPersonen.NachName:= edNachName.Text;
TfrmAufgerufen.FormAufrufen(FPersonen);
// Dynamische –Formular aufrufen
edVorName.Text:= FPersonen.VorName;
edNachName.Text:= FPersonen.NachName;
end;
procedure TfrmMainForm.FormCreate(Sender: TObject);
begin
FPersonen:= THPLPersonen.Create;
end;
procedure TfrmMainForm.FormDestroy(Sender: TObject);
begin
FPersonen.Free;
end;
end.
Ist eigentlich nichts Besonderes, bis auf die Zeile wo das Dynamische -Formular aufgerufen wird.
Nun kommt, dass dynamische Form:
Delphi-Quellcode:
unit uDynamischesFenster;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,
uPersonenKlasse;
type
TfrmAufgerufen =
class(TForm)
edVorName: TEdit;
edNachName: TEdit;
btAbbruch: TButton;
btOK: TButton;
procedure btOKClick(Sender: TObject);
private
FPersonenKopie: THPLPersonen;
procedure EditFelderFuellen;
public
class procedure FormAufrufen (aPersonen: THPLPersonen);
end;
var
frmAufgerufen: TfrmAufgerufen;
implementation
{$R *.dfm}
{ TfrmAufgerufen }
class procedure TfrmAufgerufen.FormAufrufen(aPersonen: THPLPersonen);
begin
with TfrmAufgerufen.Create(
NIL)
do
try
FPersonenKopie:= aPersonen;
EditFelderFuellen;
if ShowModal= mrOk
then
begin
aPersonen:= FPersonenKopie;
end;
finally
free;
end;
end;
procedure TfrmAufgerufen.EditFelderFuellen;
begin
edVorName.Text:= FPersonenKopie.VorName;
edNachName.Text:= FPersonenKopie.NachName;
end;
procedure TfrmAufgerufen.btOKClick(Sender: TObject);
begin
FPersonenKopie.VorName:= edVorName.Text;
FPersonenKopie.NachName:=edNachName.Text;
end;
end.
Zu beachten ist das die Eigenschaft ModalResult vom OK-Button auf mrOK gestellt wird.
Die Bezeichnungen sollten hoffentlich selbsterklärend sein.
Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.