Q&A

  • Form Creation Check.....?
MDI 폼에서 Child 폼이 이미 열려 있는지를 체크하여 열려 있으면 MDI Child폼의 상위로

보내고, 열려있지 않으면 선택한 폼을 띄우고자 합니다.



아래와 같이 해 보았는데... 잘 모르겠네요...



procedure TfrmMain.pFormLoad(pForm: TForm);

var

i: Integer;

bResult: Boolean;

begin

if pForm = nil then exit;

If MDIChildCount = 0 then

begin

pForm := pForm.Create(Application);

pForm.Show;

exit;

end;

bResult := True;

With frmMain do begin

for i := MDIChildCount-1 downto 0 do

begin

if MDIChildren[i].Name = pForm.Name then

begin

pForm.Show;

bResult := False;

exit;

end;

end;



if bResult then

pForm := pForm.Create(Application);

pForm.Show;

end;

end;



문제는 프로시져 호출시 생성되지 않은 폼을 전달하고자 할때 입니다.

Form1이 아직 생성되지 않았다면

pLoadForm(Form1);

Form1 = nil 값이 되어 파라미터 값을 전달 할 수 없거든요....



위의 내용을 보시고 한번 체크좀 해주세요...







1  COMMENTS
  • Profile
    이준해 1999.09.16 07:11
    pForm 은 아마 type 이 TForm 으로 정의된 변수겠죠 ?

    create method는 엄밀히 얘기해서 class reference 에 사용할 수 있습니다.

    그리고, pForm 은 예를 들면 TForm1 과는 다릅니다.



    다시말해, pForm.create(Application)은 에러가 나지 않을까 싶네요.

    그리고 parameter 가 Object 이므로 nil을 parameter로 주어도 에러는

    나지 않습니다.



    원하시는 작업을 하시려면 이렇게 해보시는게 어떨까요?



    1. MDIForm에서는 Child를 Open 할때마다. 해당 Child Form 에 대한 정보를

    유지하고 없어질때마다 갱신하십시오.

    2. 아래에 말씀하신 작업을 하실려면, Form에 할당한 name 을 가지고 해당

    Class를 찾아 create하는 방법을 고려하십시오.

    3. 이때, 아래에서 Check하는 루틴을 사용하십시오.



    쩝, 상세한 방법은 저도 시간이 좀 걸릴것 같아서리..

    해보시고 안되면 다시 Posting 하세요. 도와드릴께요.



    홍길동 wrote:

    > MDI 폼에서 Child 폼이 이미 열려 있는지를 체크하여 열려 있으면 MDI Child폼의 상위로

    > 보내고, 열려있지 않으면 선택한 폼을 띄우고자 합니다.

    >

    > 아래와 같이 해 보았는데... 잘 모르겠네요...

    >

    > procedure TfrmMain.pFormLoad(pForm: TForm);

    > var

    > i: Integer;

    > bResult: Boolean;

    > begin

    > if pForm = nil then exit;

    > If MDIChildCount = 0 then

    > begin

    > pForm := pForm.Create(Application);

    > pForm.Show;

    > exit;

    > end;

    > bResult := True;

    > With frmMain do begin

    > for i := MDIChildCount-1 downto 0 do

    > begin

    > if MDIChildren[i].Name = pForm.Name then

    > begin

    > pForm.Show;

    > bResult := False;

    > exit;

    > end;

    > end;

    >

    > if bResult then

    > pForm := pForm.Create(Application);

    > pForm.Show;

    > end;

    > end;

    >

    > 문제는 프로시져 호출시 생성되지 않은 폼을 전달하고자 할때 입니다.

    > Form1이 아직 생성되지 않았다면

    > pLoadForm(Form1);

    > Form1 = nil 값이 되어 파라미터 값을 전달 할 수 없거든요....

    >

    > 위의 내용을 보시고 한번 체크좀 해주세요...

    >

    >

    >