원래 그랬었나?
저도 왜 안되는지 언제부터 안되는지 잘모르겠네요..
하지만 님께서 원하시는 기능은 ... 다음과 같이 구현할수 있습니다.
그전에 먼저 질문이 있는데 Builder버젼이 2006이상이시죠?
VCL에서는 TaskBar에 나타나는 버튼이 메인폼의 버튼이 아닙니다.
Application->Handle이죠
방법1
하지만 2006인가 2007인가 부터는 메인폼이 TaskBar에 나타날수 있도록 할수 있는데요
님의 경우 그렇게 된것 같구요
메인폼이 아닌 Application->Handle이 TaskBar에 나타나면 메인폼의 BorderStyle = bsNone 이라도
Taskbar에 세스템 메뉴가 타나납니다.
project1.cpp 파일에서 다음과 같이 하면...
Application->MainFormOnTaskBar=false;
SetApplicationMainFormOnTaskBar(Application, false);
Application->Initialize();
방법2
다음 방법은 대부분의 vcl버젼에 적용될것인데요
디자인 타임에 Form의 BorderStyle = bsNone 으로 하구요
다음과 같이 ..
// bsNone 때문에 사라진 System메뉴를 다시 살려주는 것이죠
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style |= WS_SYSMENU;
}
방법3
아니면 BorderStyle 을 bsNone으로 하지말고 아무렇게나 두고...
다음과 같이 해도 됩니다.
void __fastcall TForm1::CreateParams(TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.Style = WS_POPUPWINDOW & (~ WS_BORDER);
}
</pre>
방법4
그리고 또 다름과 같이 그냥 BorderStyle을 건들지 않고 하는 방법도 있습니다.
Form의 OnShow이벤트에서 ...
//CreateWindow하고 난뒤에 SetWindowLong으로 style을 바꾸는 방법입니다.
void __fastcall TForm1::FormShow(TObject *Sender)
{
if( BorderStyle == bsNone)return;
int Style = GetWindowLong(Handle, GWL_STYLE);
SetWindowLong(Handle, GWL_STYLE, Style & (~WS_CAPTION ) & (~WS_BORDER) &(~WS_DLGFRAME));
Height = Height - GetSystemMetrics(SM_CYCAPTION);
this->Refresh();
return;
}
기타...
그밖에도 윈도우를 짤라버리는등 여러가지 방법이 있을수 있겠네요
그럼..
나그네 님이 쓰신 글 :
: BorderStyle = bsNone으로 설정하면
: 캡션바가 사라진 윈도가 됩니다. 근데 여기서 문제가 생깁니다.
:
: 태스크바에서 마우스 오른클릭을 하면 모든 윈도우는 기본팝업(이동, 크기조정, 최소화, 최대화, 닫기)이 뜨는데
: BorderStyle = bsNone일경우는 팝업이 뜨지 않는군요.
:
: 그래서 BorderStyle = bsNone을 하지않고
: //---------------------------------------------------------------------------
: void __fastcall TForm1::CreateParams(TCreateParams &Params)
: {
: TForm::CreateParams(Params);
: Params.Style &= ~WS_CAPTION;
: }
: //---------------------------------------------------------------------------
: //---------------------------------------------------------------------------
: class TForm1 : public TForm
: {
: __published: // IDE-managed Components
: private: // User declarations
: public: // User declarations
: __fastcall TForm1(TComponent* Owner);
: void __fastcall CreateParams(TCreateParams &Params);
: };
: //---------------------------------------------------------------------------
: 코딩을 했더니... 캡션바가 사라지지 않고 그냥 보이네요.
: 예전에는 사라졌었는데.. 쩝~ 뭔가 바뀐듯
:
: 암튼... 캡션바를 없앤후에 태스크바에서 기본윈도 팝업이 뜨게하는 방법좀 부탁드립니다.