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 값이 되어 파라미터 값을 전달 할 수 없거든요....
위의 내용을 보시고 한번 체크좀 해주세요...
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 값이 되어 파라미터 값을 전달 할 수 없거든요....
>
> 위의 내용을 보시고 한번 체크좀 해주세요...
>
>
>