__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
MenuCreate("MS 파워포인트...");
MenuCreate("MS 엑셀...");
MenuCreate("-");
MenuCreate("E&xit");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::MenuCreate(String Cap)
{
TMenuItem *NewItem = new TMenuItem(this);
NewItem->Caption = Cap;
File1->Add(NewItem);
NewItem->OnClick = MenuEvent;
}
void __fastcall TForm1::MenuEvent(TObject *Sender)
{
if(Sender->ClassNameIs("TMenuItem"))
{
if(dynamic_cast(Sender)->Caption == "MS 파워포인트...")
ShowMessage("앗! 파워포인트를 실행하시려고요..? 제가 시간이 없어서...");
if(dynamic_cast(Sender)->Caption == "MS 엑셀...")
ShowMessage("헤헤, 엑셀은 니가 알아서 실행혀~~");
if(dynamic_cast(Sender)->Caption == "E&xit")
Close();
// 프로그램을 종료한다.
}
}
메뉴의 동적생성에 관한 이 예제에 관해 질문이 있습니다.
실행해보니
dynamic_cast<TMenuItem *>(Sender)->Caption 값을 watch윈도우에서 확인해 보면
E2031 Cannot cast from 'const System::TObject *' to 'Menus::TMenuItem *'
이렇게만 나옵니다. 그래도 같은 결과를 얻을 수는 있습니다.
그런데 ((TMenuItem *)(Sender))->Caption 으로 바꾸면 제대로 값이 표시됩니다.
대체 위의 에러메시지는 무엇을 뜻하나요?
|