Eine dynamische Dialog-Form gibt man einfach wieder frei:
Delphi-Quellcode:
procedure Foo;
var
LForm: TForm;
begin
LForm := TFooDialo.Create(nil);
try
case LForm.ShowModal of
mrOK :
begin
...
end;
mrCancel :
begin
...
end;
...
end;
finally
LForm.Free;
end;
end;
Wenn in dem Dialog noch weitere Daten erfasst werden sollen, dann übergibt man vor dem Anzeigen diese Daten und holt sich diese im Erfolgsfall wieder ab:
Delphi-Quellcode:
type
TFooData = class( TPersistent )
public
property SomeStr: string;
property SomeBool: Boolean;
end;
type
TFooDialog = class( TForm )
Edit1: TEdit;
Checkbox1: TCheckBox;
private
procedure AssignTo( FooData: TFooData ); overload;
procedure AssignFrom( FooData: TFooData );
protected
procedure AssignTo( Dest: TPersistent ); overload; override;
public
procedure Assign( Source: TPersistent ); override;
end;
procedure TFooDialog.AssignTo( FooData: TFooData );
begin
FooData.SomeStr := Edit1.Text;
FooData.SomeBool := CheckBox1.Checked;
end;
procedure TFooDialog.AssignFrom( FooData: TFooData );
begin
Edit1.Text := FooData.SomeStr;
CheckBox1.Checked := FooData.SomeBool;
end;
procedure TFooDialog.AssignTo( Dest: TPersistent );
begin
if Dest is TFooData then
AssignTo( TFooData( Dest ) )
else
inherited;
end;
procedure TFooDialog.Assign( Source: TPersistent );
begin
if Source is TFooData then
AssignFrom( TFooData( Source ) )
else
inherited;
end;
und dann so
Delphi-Quellcode:
procedure Foo( FooData: TFooData );
var
LDialog: TForm;
begin
LDialog := TFooDialog.Create( nil );
try
LDialog.Assign( FooData ); // Daten an die Form schreiben
if LDialog.ShowModal = mrOK then
FooData.Assign( LDialog ); // Daten von der Form lesen
finally
LDialog.Free;
end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)