|
임문환님의 답글 잘 봤습니다.
사실 빌더 초보로서 이것저것 건드리는 와중에 가르쳐주신 방법인
menuitem->OnClick = MyHandler;
을 해봤었던 것도 사실입니다. 그런데 그때는 안됐었거든요..
그 현상은 이렇습니다. 다음의 코드를 봐주세요.
void __fastcall TForm1::FormCreate(TObject *Sender)
{
..... 중간생략 ....
MRUManager1->RecentMenu = PopupMenu1->Items;
MRUManager1->LoadFromIni(inip, szMRU1);
FilenameEdit1->Text = MRUManager1->Strings->Strings[0];
FilenameEdit1->Text = MRUManager1->Strings->Strings[1]; // 여기요~
PopupMenu1->Items->Items[0]->OnClick = MRU1Click;
PopupMenu1->Items->Items[1]->OnClick = MRU1Click;
}
Rxlib의 TMRUManager와 TFilenameEdit를 이용하는 부분이구요..
ini 파일에서 MRUManager가 읽을 아이템이 한 개였다면
제가 "// 여기요~"라고 코멘트한 부분에서 런타임에 에라가 발생하겠죠.
그런데 프로그램이 다운되는게 아니라 assert failure일 때 나오는
에라 메시지하고 MRUManager가 보내는 에라 메시지 두 개가 나온 후에
프로그램이 정상적으로 돌더군요.
이 상태에서 팝업메뉴의 OnClick이 동작하지 않더라는 겁니다.
마지막줄에 브레이크 포인트를 잡아놓고 스텝으로 실행시켰더니
역시 문제가 있는 코드에서 에라 메지지가 나오더군요.
그런데 다음이 이상했어요. F8을 누르면 다음 문장으로 가는 것이
아니라 ProjectName.cpp에 있는
Application->Run();
에 커서가 있는 거에요. 즉, 위의 FormCreate()의 나머지 문장은
빼먹고 넘어간 것이죠. 그렇다면 위에서 에라가 난 문장을 실행할 때
에라 메시지가 뜨고 리턴이 됐다는 소리인데 이게 가능한 겁니까?
물론 저 라인을 지우고 나니 OnClick 이벤트 핸들러가 잘 실행이 됬습니다.
|