C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[43972] Re:질문] treeView에서... 마우스 오른쪽 버튼을 직접 눌렸을때 반전 막대가 이전에 선택되었던 곳으로
이윤관 [younkwan] 992 읽음    2006-03-07 17:23
아래처럼 한번해 보세요.
전이렇게 해서 됐는데... 질문에대한 답변이되셨길...

void __fastcall TMDIChildHost::NodeTreeMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TTreeNode   *SelNode;
    int xx, yy;

    xx = NodeTree->Left + X + 105;
    yy = NodeTree->Top + Y + 176;
    if(Button == mbRight)
    {
        SelNode = NodeTree->GetNodeAt(X, Y);
        NodeTree->Selected = SelNode;
        if(NodeTree->Selected->IsFirstNode())
        {
             ...
        }
        else
        {
              ...
        }
    }
}



초록물고기 님이 쓰신 글 :
: 안녕하세요..
: 아래는 하나의 트리뷰에서... 오른쪽 마우스 버튼을 클릭하면,  특정 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);
:
:                         }
:          }
:

+ -

관련 글 리스트
29666 질문] treeView에서... 마우스 오른쪽 버튼을 직접 눌렸을때 반전 막대가 이전에 선택되었던 곳으로 이동 초록물고기 871 2004/05/09
43972     Re:질문] treeView에서... 마우스 오른쪽 버튼을 직접 눌렸을때 반전 막대가 이전에 선택되었던 곳으로 이윤관 992 2006/03/07
34982     Re:질문] treeView에서... 마우스 오른쪽 버튼을 직접 눌렸을때 반전 막대가 이전에 선택되었던 곳으로 이? 김성연 1300 2004/05/10
29670     Re:질문] treeView에서... 마우스 오른쪽 버튼을 직접 눌렸을때 반전 막대가 이전에 선택되었던 곳으로 초록 물고기 1095 2004/05/11
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.