C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[1065] [Forms] MDI Child 폼 Close시 Hide시키기
장성호 [nasilso] 16038 읽음    2011-07-06 19:02
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되었다.

그럼..
제이원 [bijang66]   2011-09-20 15:12 X
델파이 말고 C++빌더   로 변환 좀 부탁드립니다.
이치고 [seokj777]   2011-11-17 08:45 X
문제를 분석하시는 능력이 놀랍습니다. 정보 감사합니다.

+ -

관련 글 리스트
1065 [Forms] MDI Child 폼 Close시 Hide시키기 장성호 16038 2011/07/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.