|
임프랍니다.
다음과 같이 하세요.
void __fastcall TForm1::OnlineStatusClick(TObject *Sender)
{
TForm* form = new TForm(Form1);
form->FormStyle = fsNormal;
form->BorderStyle = bsNone;
form->Width = Form1->Width;
form->Height = 150;
form->Visible = true;
form->OnClose = NewFormClose; // 새폼이 닫힐 때 자동으로 free되도록 핸들러를 달아주자~
// 여기다가 요렇게~ ^^;;
TButton *Button = new TButton(form); // 새폼 위의 새 버튼 생성, Owner를 지정했으므로 폼이 파괴될 때 함께 파괴됨
Button->Parent = form;
Button->Caption = "눌러봐!";
Button->SetBounds(100, 50, 60, 30);
Button->OnClick = NewButtonClick; // 폼 닫기 핸들러를 달아주자~
}
void __fastcall TForm1::NewFormClose(TObject *Sender, TCloseAction &Action)
{
Action = caFree; // 닫힐 때 자동으로 free되어부러라!
}
void __fastcall TForm1::NewButtonClick(TObject *Sender)
{
dynamic_cast<TForm *>(dynamic_cast<TButton *>(Sender)->Parent)->Close();
// 넘어온 Sender는 실제로 버튼이므로 버튼으로 캐스팅후 그 패어런트를 다시 폼으로 캐스팅,
// 캐스팅된 폼에서 Close() 호출.
// 여기선 기본 캐스팅을 해도 상관없지만.. 그냥 멋부린다고 해봤음.
}
그럼 이만...
정원희 님이 쓰신 글 :
: 안녕하세요...
:
: 폼에 버튼을 하나 달고, 그 버튼을 클릭했을때 임의로 윈도우를 생성하고, 만들어진 윈도우의
: 클릭이벤트 발생시 그 윈도우를 닫아버릴려고 하는데...
: 어떻게 하는지를..ㅡ.ㅡ;;
:
: 아래에서 버튼 클릭이 눌러졌을때 임의로 창을 만들어서 띄우는거 까지는 쉬운데...
: 저 밑의 form 에다가 클릭이벤터를 어떻게 추가하는지를 모르겠네요.
:
: 미리 폼을 만들어서 추가해 넣으면 되긴 되겠지만, 꼭 수동으로 생성하고 이벤트 추가를 해보고
: 싶어서요...
:
: void __fastcall TForm1::OnlineStatusClick(TObject *Sender)
: {
: TForm* form = new TForm(Form1);
: form->FormStyle = fsNormal;
: form->BorderStyle = bsNone;
: form->Width = Form1->Width;
: form->Height = 150;
: form->Visible = true;
:
: // 여기다가 뭘 어떻게? ㅡ.ㅡ;;
:
: }
:
: 부탁드림다. ^_^
|