|
안녕하세요..
제가 질문의 의도가 잘 못 전달 된것 같습니다.
폼위에, treeview를 올려놓고, 그 treeview에서 , 오른쪽 마우스 버튼을 눌러,
칼럼 editor와 item editor를 이용하여, root 아이템및, subitem을 여러개 만들었습니다.
그리고 바로 컴파일 하여 ,,, 트리뷰를 의 아이템을 모두 펼쳐 놓은 상태에서...
오른쪽 마우스 버튼을 눌러 , 특정 노드를 선택하면... 마우스의 반전막대가,,, 바로 이전에
선택되었던 곳으로 자동으로 이동되는 현상이 나타납니다.
왼쪽 버튼은 이런 현상없이 잘 동작합니다.
이런 현상이 나타나는 가운데... 아래처럼 코딩하여 마우스 오른쪽 버튼 기능을 이용하려 했습니다.
그런데.. 아래에서 처럼... "테스트" 라는 자식 노드를 마우스 왼쪽으로 먼저 선택한 후에,,,
오른쪽 버튼을 누르면 ,, 정상적으로 팝업 윈도가 뜹니다.
그런데... 지금 반전 막대는 맨상위 root에 있었는데... 그냥 바로 "테스트" 라는 자식노드를
선택하면,,, 메모리 관련 에러가 납니다. 이것이 위에서 나났던 자동으로 그전에 선택되었던 항목으로
이동하는 현상과 관계가 있는것 같아.... 마우스 오른쪽 버튼을 누를때,, 반전막대가
자동으로 이동하는 현상을 막을 수 있는 방법이 있는 방법이 있는가 해서 입니다.
: void __fastcall TmainFrame::TreeView1MouseDown(TObject *Sender,
: TMouseButton Button, TShiftState Shift, int X, int Y)
: {
if (Button == mbRight )
{
: if(TreeView1->Selected->Text == "테스트" )
: {
:
: PopupMenu1->Popup(Pnt.x, Pnt.y);
:
: }
: : }
}
감사합니다.
초록물고기 님이 쓰신 글 :
: 안녕하세요..
: 아래는 하나의 트리뷰에서... 오른쪽 마우스 버튼을 클릭하면, 특정 popup menu를 띄워서
: popupmenu 에서 눌린것에 따라서 무언가의 작업을 하려고 합니다.
:
: 트리뷰에는 root 밑에 여러개의 depth (level )을 가지고 있습니다.
: 만약 지금 현재 맨위의 root가 선택되어 있었고,,,
: 여기서 child node를 선택할 때, 방법은 두가지가 존재할 것 같습니다.
:
: 방법 1)
: 선택하고자는 child node를 마우스 왼쪽 버튼으로 누르고(먼저 child node 선택),,,
: 마우스 오른쪽 버튼을 눌러 popup menu를 띄은경우.
:
: 방법 2)
: 선택하고자는 child node를 ,바로 마우스 오른쪽 버튼을 누르고,
: popup menu를 띄운경우.
:
:
: 위에서 방법 1로 했을 경우는 정상적으로 popmenu menu에 연결된 함수까지...모든것이 정상적으로
: 수행 됩니다.
: 문제는 2번인데... 왼쪽 버튼으로 먼저 선택하는 것 없이.. 마우스 오른쪽 버튼을 바로 누른경우...
: 선택됐음을 표시하는 반전막대가,,, 그전에 선택되었던 곳으로 (지금 같은 경우 root로 이동) 이동되는 것을 볼수 있습니다.
: 그러면서... 메모리 access violation 에러를 냅니다...
: 트리뷰가 잘못 만들어졌나 해서,,, 트리뷰를 여러번 만들었는데요...현상을 똑같습니다.
: 어떤 이유에서 이런 현상이 나타는 것인지요?
: selected 속성과 관계가 있는 것 같은데... 무었때문이지 잘 모르겠습니다.
:
: ======= 트리뷰에서 마우스 오른쪽 버튼이 눌렸을 popup menu를 띄우려 합니다 ===
: void __fastcall TmainFrame::TreeView1MouseDown(TObject *Sender,
: TMouseButton Button, TShiftState Shift, int X, int Y)
: {
: TTreeNode* pNode = TreeView1->GetNodeAt(X, Y);
: if(Button == mbRight)
: {
:
: TPoint Pnt(X, Y);
: Pnt = ((TTreeView*)Sender)->ClientToScreen(Pnt);
: if(!pNode)
: { // 현재 트리노드가 선택되지 않았다.
: if(TreeView1->Items->Count == 0)
: {
: ShowMessage ( "아무 노드가 없습니다" );
:
: }
: }
: else
: {
: // 테스크 라는 곳에서... 마우스 오른쪽 버튼이 눌렸다면..
:
: //여기서 "테스트" 라는 node를 왼쪽 버튼으로 선택후 , 마우스 오른쪽 버튼을
: //누르면,,, 모든 것이정상적으로 수행, 그러나 마우스 오른쪽 버튼을 바로 누르면,,
: //메모리 access violation error 가 나는 것을 볼수 있습니다.
: //어떤 문제때문에 이런 현상이 나타나는 것인지요?
: if(TreeView1->Selected->Text == "테스트" )
: {
:
: PopupMenu1->Popup(Pnt.x, Pnt.y);
:
: }
: }
:
|