|
마우스다운 이벤트보다 팝업메뉴가 먼저 실행되는 것 때문에 그럴겁니다.
님의 코드를 약간 바꿔보았습니다.
먼저 LeftView의 PopupMenu 속성을 NULL로 주시고,
PMenu의 AutoPopup속성을 false로 주세요.
//--------------------------------------------------------------------------
void __fastcall TLeftView::TreeMouseDown(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
TTreeNode* pNode = Tree->GetNodeAt(X, Y);
if(Button == mbRight) {
//########################
TPoint Pnt(X, Y);
Pnt = ((TTreeView*)Sender)->ClientToScreen(Pnt);
//########################
if(!pNode) { // 현재 트리노드가 선택되지 않았다.
if(Tree->Items->Count == 0) { // 노드 자체가 아무것도 없다. (팝업을 띄움)
PMenu->PMDelete->Enabled = false; // 노드가 없으니 삭제메뉴 필요 없음
PMenu->PMModify->Enabled = false; // 노드가 없으니 변경메뉴 필요 없음
//########################
PMenu->Popup(Pnt.x, Pnt.y);
//########################
}
} else { // 트리노드가 선택되었다. 즉, 하나 이상의 트리노드가 존재한다. (팝업을 당근 띄움)
PMenu->PMDelete->Enabled = true; // 노드가 있으니 삭제메뉴 사용가능
PMenu->PMModify->Enabled = true; // 노드가 있으니 변경메뉴 사용가능
//########################
PMenu->Popup(Pnt.x, Pnt.y);
//########################
}
}
}
//----------------------------------------------------------------------
컴파일을 해보지는 않았지만.. 이런 방법으로 하셔도 될 것 같습니다.
|