안녕하세요.
MDI 폼에서 Children 을 실행 하도록 만든 함수 입니다.
아래와 같이 함수를 만들어 메뉴에서 폼클래스와 폼을 넘겨 폼이 없을 경우
생성 하고 있는 경우 show를 하도록 하였습니다.
생성은 되는데 두 번째 같은 폼을 실행하려고 하면 폼이 nil 로 되어 오류가 발생합니다.
아래 코드에 잘못된 부분이 있는것 같은데 찾지 못하고 있습니다. ^^
Delphi 5를 사용 하였습니다.
프로시져 내부에서는 폼이 값을 유지하고 프로시져를 빠져나올때 nil로 초기화 됩니다.
도움 부탁드립니다.
한가지 더 alphi skin 을 사용 중인데 children 폼을 최대화 -> 최소화 -> restore 하면
이상동작을 하는데 원인을 모르겠습니다.
다른 방법을 사용해서 해결은 했지만 원인이 궁금하네요 ^^;
혹시 알고계신분 있으시면 답변 부탁드립니다.
감사합니다.
<!--CodeS-->
메인 메뉴에서 함수 호출
UF_ShowChildForm(TfrmTotalSum, frmTotalSum);
// 메인 메뉴에서 호출 하는 함수
procedure TfrmMain.UF_ShowChildForm(frmClass: TFormClass; frmChildForm: TForm);
var
i : Word;
begin
FormExist:=False;
For i :=0 To MDIChildCount-1 Do
begin
If MDIChildCount = 0 Then
begin
Break;
end;
If MDIChildren[i] Is frmClass Then
begin
FormExist := True;
BREAK;
end;
end;
If FormExist Then frmChildForm.Show
Else
begin
frmChildForm := frmClass.Create(Application);
// Form 실행 시 최대화하려면 아래와 같이 메시지 처리를 해야함
Sendmessage(frmChildForm.Handle, WM_SYSCOMMAND, SC_MAXIMIZE,0);
frmChildForm.Show;
end;
end;
<!--CodeE-->
아래와 같은 결과를 원하시는 것인지요?
메인 메뉴에서 함수 호출
frmTotalSum := UF_ShowChildForm(TfrmTotalSum);
// 메인 메뉴에서 호출 하는 함수
<!--CodeS-->
function TfrmMain.UF_ShowChildForm(frmClass: TFormClass) : TForm;
var
i : Word;
begin
Result := nil;
For i :=0 To MDIChildCount-1 Do
begin
If MDIChildCount = 0 Then
begin
Break;
Exit;
end;
If MDIChildren[i] Is frmClass Then
begin
Result := MDIChildren[i];
BREAK;
end;
end;
If Result = nil Then
begin
Result := frmClass.Create(Application);
// Form 실행 시 최대화하려면 아래와 같이 메시지 처리를 해야함
Sendmessage(Result.Handle, WM_SYSCOMMAND, SC_MAXIMIZE,0);
end;
Result.Show;
end;
<!--CodeE-->