임펠리테리입니다.
Tip'N Tricks에 조로님이 올려주신 팁 중에 현재 폼의 X (닫기) 버튼을 활성/비활성 시키는 팁이 있죠.
바로가기 :
73 / [팁]종료버튼 동적으로 disable 시켰다 enable 시키는 방법
이걸 아주 조금만 응용하면 원하시는 동작을 할 수 있습니다. 왜냐하면, 조로님의 팁 자체가 원래 폼의
시스템 메뉴에서 닫기 항목을 활성/비활성시키는 것인데 이것이 폼의 X 버튼과 연결되는 것이기 때문입니다.
이런 시스템 메뉴 조작을 위해서는 윈도우의 핸들이 필요하구요, 조로님의 팁에서는 그냥 Handle, 즉 폼의
윈도우 핸들을 사용했습니다.
원래 윈도우즈에서 작업표시줄에서 오른쪽 버튼을 눌러 나오는 시스템 메뉴는 그 프로그램의 메인윈도우의
시스템 메뉴입니다. 그런데 빌더나 델파이에서는 프로그램의 메인폼이 실제 메인 윈도우가 아니고, 실제
메인 윈도우는 숨겨져 있기 때문에 메인폼의 시스템 메뉴를 암만 조작해도 프로그램의 시스템 메뉴는 반응이
없지요.
그런데 이 숨겨진 메인 윈도우의 핸들은 Application->Handle에 저장되어 있으니까, 조로님의 팁에 쬐끔만
손질을 하면 원하시는 대로 프로그램 자체의 '닫기' 를 비활성화할 수 있는 거지요.
그래서 결론적으로, 프로그램의 '닫기' 메뉴를 비활성화하려면,
void __fastcall TForm1::Button1Click(TObject *Sender)
{
HMENU hMenu = GetSystemMenu(Application->Handle, false);
EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND|MF_GRAYED);
DrawMenuBar(Handle);
}
그리고 다시 활성화하려면..
void __fastcall TForm1::Button2Click(TObject *Sender)
{
HMENU hMenu = GetSystemMenu(Application->Handle, false);
EnableMenuItem(hMenu, SC_CLOSE, MF_BYCOMMAND&~MF_GRAYED);
DrawMenuBar(Handle);
}
이렇게 하면 됩니다.
수고하신 조로님의 팁을 살짝 훔쳐다가 생색은 혼자 다 낸거 같아서 쑥스럽네요. ^^;;
그럼 이만...
길드짱 님이 쓰신 글 :
: Application->Minimize();
: 상태에서 오른쪽 버튼을 누르면 시스템 메뉴가 나오지요...
: 그런데...
:
: 시스템 메뉴를 않나오게 할수 있는 방법은 없나요....아니면...시스템 메뉴중...닫기를 사용할수 없게 하고
: 싶은데....어떤방법이 있을지 간단한 소스좀 알려주세요...ㅜ_ㅜ;
:
: 맨날 질문만 해서 지송함다....^^;
: