폼을 생성하는 방법에는 2가지가 있다.

첫번째는 자동으로 생성하는 방법(AutocreateForm)이고, 두번째는 디자인타임시에 만든 폼을 런타임시에 코딩으로 생성하는 방법(Available Form)이다.


AutoCreate Form



델파이에서 File/New Form메뉴로 생성된 폼은 일단 모두 AutoCreate From으로 등록된다.
확인은 Project메뉴의 Option에서 할 수 있다

AutoCreate Form들은 Project Source에서 Application.Run을 수행하기 이전에 미리 생성된다.

[Project Source]
Begin
   Application.Initialize;
   Application.CreateForm(TForm1, Form1);
   Application.CreateForm(TForm2, Form2);
   Application.Run;
End;

Available Form



Project/Option메뉴에서 다음과 같이 폼을 Available Form으로 등록시킬 수 있다.
Available Form으로 등록된 폼을 열기 위해서는 프로그래머가 직접 코딩으로 폼을 생성해야만 열 수 있고 해제할 수가 있다. 

생성
Form1 := TForm1.Create(Application);

해제
Form1.Free;

▶ Show
Show를 사용하여 폼을 열면 호출한 코드가 실행을 멈추지 않는다. 이것은 사용자가 원하는 대로 많은 폼을 열어서 자유롭게 폼을 선택하여 작업할 수 있다. (즉, Form1에서 Form2를 호출한 뒤 Form2를 닫지 않고도 Form1을 건드릴 수 있다는 말이다.)

Form1.Show;

Show로 열고 바로 해제를 하면 폼은 바로 나타났다가 사라진다. 폼이 해제될 시점은 폼이 Close될 때이므로 OnClose이벤트를 이용할 수 있다.

Procedure TForm1.FormClose (Sender: Tobject, var Action: TCloseAction);
Begin
   Action := CaFree;
End;

▶ ShowModal
ShowModal을 사용하여 폼을 열면 폼을 호출한 코드는 ModalForm이 닫힐 때까지 정지한다. 그러므로 ModalForm이 열린 상태에서는 다른 폼을 선택할 수가 없다. (즉, Form1에서 Form2를 호출한 뒤 Form2를 닫지 않고서는 Form1을 건드릴 수 없다.)

ShowModal로 열려진 폼에 Modal Result값을 가지는 버튼이 있다면 이 버튼의 OnClick이벤트에 Close를 코딩하지 않아도 이 버튼을 누르면 종료된 것이다.

예를 들어서, Form1와 Form2에 버튼이 있다고 가정하자. 




Form1의 버튼은 Form2를 호출하는 버튼으로 아래와 같이 코딩되어 있다.

If Form2.Showmodal = mrOK then
   Edit1.Text := Form2.Edit1.Text;

그리고, Form2의 버튼은 Modal Result 속성이 mrOK로 되어 있다. 
그러면, Form2의 버튼을 클릭하는 순간, OnClick이벤트의 어디에도 폼을 Close하는 코딩이 없음에도 불구하고 Form2는 Close되면서 Form2의 Edit1의 값이 Form1의 Edit1에 반영되는 것을 볼 수 있을 것이다. (Modal Result를 정해주면 자동으로 종료시켜준다.



+ Recent posts