Thema: Delphi Konzeptfrage FormCreate

Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.859 Beiträge
 
Delphi 11 Alexandria
 
#25

Re: Konzeptfrage FormCreate

  Alt 13. Mai 2009, 01:47
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.
  Mit Zitat antworten Zitat