델파이

MDIChild 폼을 Modal폼으로 생성하기, 사용자정의 생성자(constructor)

미스터몽키 2015. 12. 31. 01:19

MdiChild폼으로 이미 만들어져서 사용중인 모듈을 실행 중에 모달 폼으로 호출할 필요가 있을 때가 있다.

코드 재활용과 관리 측면에서 매우 편리한다.

 

방법은 사용자 정의 생성자 constructor 를 만들면 된다.

 

...

  public
    { Public declarations }
    constructor CreateModal(AOwner: TComponent; aName, aStdno, aGrade: String);  // 사용자정의 생성자 선언
  end;

 

var
  frmHw008_220_POS: TfrmHw008_220_POS;

implementation

 

uses Dm;

 

{$R *.DFM}

 

constructor TfrmHw008_220_POS.CreateModal(AOwner: TComponent; aName, aStdno, aGrade: String);  // 사용자정의 생성자
begin
  inherited Create(AOwner); 


  FormStyle   := fsNormal;
  BorderIcons := [biSystemMenu];
  BorderStyle := bsDialog;
  WindowState := wsNormal;
  Position    := poMainFormCenter
 

  edName.Text  := aName;
  edStdno.Text := aStdno;
  edStdno.Hint := aGrade;

end;

 

 

호출하는 곳에서는 다음 처럼 버튼 클릭시 사용자정의 생성자를 호출하면 된다.

 

procedure TfrmHw100.btHw220_CreClick(Sender: TObject);
begin
  with TfrmHw008_220_POS.CreateModal(Application, '홍길동', '123456', '1학년') do
  begin
    try
      Self.WindowState := wsMaximized;   // 이상하게 원래 최대인 기존 폼이 줄어 들어서 다시 최대화 해야한다.
      Visible                := False;               // ShowModal 하기전에 Visible False해야함, 생성자에 넣으면 작동안한다.
      ShowModal;

    finally
      Free;
    end;
  end;

end;