VCL에서
MDI Child 폼은 X버튼을 클릭하거나 Close()함수를 호출해 Close시켜도
MDI-Child폼은 hide(visible=false) 되지 않고 그냥 minimize된다.
mdi-child폼도 close될때 minimize되지 말고 일반폼처럼 hide되는 방법은 없을까?
MDI-Child폼의 OnClose이벤트에 Action을 확인해 보니..
일반폼은 Action의 default 값이 caHide인데
MDI-Child 폼은 Action의 default값이 caMinimize 였다.
1) 그래서 MDI-Child폼의 OnClose이벤트 핸들러에서 Action을 caHide로 바꿔보았다.
그랬더니 "Cannot hide an MDI Child Form" 이라는 에러메세지를 뱉어낸다.
VCL의 MDI-Child폼의 설계가 visible=false되지 않도록 한것인가 보다
2) 에러를 출력하는 곳을 확인해 보니
procedure TCustomForm. VisibleChanging; virtual 메소드 였다.
그래서 간단히 VisibleChanging; 메소드를 override하여서 에러메세지 맽어내는것을 차단했다.
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm2 = class(TForm)
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
procedure VisibleChanging; override;
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caHide;
end;
procedure TForm2.VisibleChanging;
begin
// inherited;
end;
end.
위와같이 하니 MDI-Child 폼 또한 일반폼과 마찬가지로 Close시에 에러없이 hide되었다.
그럼..
|