자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Firemonkey xe10.2 버전 서브 폼닫기 안됨
2017.05.12 19:23
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
수고 하심니다
도쿄 버전에서
서브FMX폼 닫기는 어떤 명령어로
써야 할찌 난감 하네요
문자부탁 합니다
이전버전에서은 CLOSE로 닫히었는데
빠른 답변부탁 합니다
댓글 2
Firemonkey xe10.2 버전 서브 폼닫기 안됨
2017.05.12 19:23
본 게시판 사용시 당부 사항
* 이 게시판은 자유롭게 질문을 올리고 자발적으로 답변을 공유하는 게시판입니다.
* 어느 누구도 답변을 달아야만 하는 책임은 없습니다.
* 따라서 질문을 올리실 때에는 최대한 자세하고 정중하게 질문을 올려 주세요.
* 최대한 질문을 자세히 올려야 답변도 자세히 올라 옵니다.
* 본 질문에 답변을 주시는 여러 개발자님들께 미리 감사드립니다.
-----------------------------------------------------------------------------------------------
수고 하심니다
도쿄 버전에서
서브FMX폼 닫기는 어떤 명령어로
써야 할찌 난감 하네요
문자부탁 합니다
이전버전에서은 CLOSE로 닫히었는데
빠른 답변부탁 합니다
저도 테스트하니 데스크탑(윈도우, 맥)은 정상, 모바일(안드로이드, 아이폰)에서는 폼이 닫히지 않습니다.
테스트 한 코드는 아래와 같습니다.
[메인 폼]
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Hide;
Action := TCloseAction.caFree;
Form2 := nil;
end;
[서브 폼]
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := TCloseAction.caFree;
Form2 := nil;
end;
이번 도쿄버전에서 "Purgatory" 기능(폼과 컨트롤 지연된 파괴) 삭제된 내역이 있습니다.
그 영향으로 TFmxObject.Release 대신 TFmxObject.Free를 사용하도록 권고하고 있고, 코드들도 그에 맞춰 구현되었습니다.
아래 그림은 TCommonCustomForm.Close 메소드의 일부 소스코드입니다.
왼쪽은 10.1 베를린, 오른쪽은 10.2 도쿄의 소스코드입니다.
보시는 것과 같이 Release 메소드 대신 Free 메소드로 구현된 것을 확인할 수 있습니다.
문제는, Free로 폼을 해제할때 깔끔하게 해제되지 않는 것으로 현재는 판단됩니다.
현재의 해결책으로는 폼이 닫힐때(FormClose 메소드에서) Hide 명령어를 추가해주시기 바랍니다.
(더 좋은 해결책이 찾으면 관련 내용을 포스팅 하도록 하겠습니다.)
아래 코드를 참고하시기 바랍니다.
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Hide;
Action := TCloseAction.caFree;
Form2 := nil;
end;