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
[24921] Re:Re:그렇지만 마우스의 위치에 따라서 처리를 해야 하는데.. 오또케 ^^;;
김원주 [] 847 읽음    2003-03-26 15:12
답변감사합니다.
OnPopup이 그런 용도로 사용되는 군요.. 감사..
그렇지만.. 제가 원하는 것은..
마우스 포인터가 트리노드가 아닌 허공을 클릭하면 팝업을 아예
띄우지 못하게 하고, 해당의 트리노드에 대해서 (오른쪽)클릭해야 팝업을 띄우려는
거거든요...
그러다 보니 어떻게 OnMouseDown을 사용하게 되었습니다.

void __fastcall TLeftView::TreeMouseDown(TObject *Sender,
      TMouseButton Button, TShiftState Shift, int X, int Y)
{
    TTreeNode* pNode = Tree->GetNodeAt(X, Y);
    if(Button == mbRight) {
        if(!pNode) {   // 현재 트리노드가 선택되지 않았다.
            if(Tree->Items->Count == 0) {  // 노드 자체가 아무것도 없다. (팝업을 띄움)
                   PMenu->PMDelete->Enabled = false;  // 노드가 없으니 삭제메뉴 필요 없음
                PMenu->PMModify->Enabled = false;  // 노드가 없으니 변경메뉴 필요 없음
                Tree->PopMenu = PMenu;
            } else {  // 트리노드가 있는데 노드를 선택하지 않았다. (팝업을 안띄움)
                Tree->PopMenu = NULL;
            }
        } else {  // 트리노드가 선택되었다. 즉, 하나 이상의 트리노드가 존재한다. (팝업을 당근 띄움)
               PMenu->PMDelete->Enabled = true;  // 노드가 있으니 삭제메뉴 사용가능
            PMenu->PMModify->Enabled = true;  // 노드가 있으니 변경메뉴 사용가능
            Tree->PopupMenu = PMenu;
        }
    }
}

위와 같습니다.
보시면 아시겠죠?
이런 상황에서.. 팝업메뉴를 띄우려구 하니..
쩝.. 힘듭니다.

만약에 둘리님이 말씀하신 OnPopup에서 처리하면 마우스의 오른쪽 버튼을 클릭한 지점의
위치에 트리노드가 있던 없던 처리는 가능할거 같은데..
문제는 위의 메소드 자체가 더 복잡하게 갈꺼기 때문에..
위와 같은 것을 처리해야 할거 같은데 어떻게 방법이 없을까요?

한번만더 가르쳐 주세요.
부탁드립니다.

감사합니다.


둘리 님이 쓰신 글 :
: OnMouseDown에서 하시지 마시고요
: TPopupMenu 의 OnPopup에서 Enable/Disable 을 처리 하세요
:
:
: 김원주 님이 쓰신 글 :
: : 초보인데요..
: : 궁금한 사항이 있어서 이렇게 질문을 올립니다.
: : 몇일째 해보구 있는 내용인데.. 잘 안되네요..
: :
: : 현재 프로그램의 트리뷰에서 팝업메뉴 띄우려구 합니다.
: : 그런데.. 팝업메뉴를 특정의 트리노드에서는 몇가지 메뉴에 대해서 Enabled 를 false로
: : 놓으려고 합니다.
: : 그래서 마우스의 오른쪽 버튼이 눌렸을때 OnMouseDown 에서 오른쪽 마우스에 대한
: : 처리하는 내부에서 트리노드의 값을 확인하여 팝업메뉴 일부 속성에 Enabled를
: : false로 설정했습니다.
: :
: : 그런데.. 보니까..
: : 처음 마우스의 오른쪽을 누르니까 전혀 변경되지 않고
: : 마우스 오른쪽 버튼을 두번째 누르니까 그 다음부터 적용이 되네요..
: : 왜 그런지 모르겠습니다.
: : 뭔가 있을거 같은데..
: : 제발 아시는 분 알려주시면 감사하겠습니다.
: :
: : 그럼 기다리고 있겠습니다.
: : 감사합니다.
: :

+ -

관련 글 리스트
24918 [질문]팝업메뉴의 특정메뉴를 변경하는 과정에서 문제가... 김원주 672 2003/03/26
24919     Re:[질문]팝업메뉴의 특정메뉴를 변경하는 과정에서 문제가... 둘리 810 2003/03/26
24921         Re:Re:그렇지만 마우스의 위치에 따라서 처리를 해야 하는데.. 오또케 ^^;; 김원주 847 2003/03/26
24922             Re:Re:Re:그렇지만 마우스의 위치에 따라서 처리를 해야 하는데.. 오또케 ^^;; skjoon 936 2003/03/26
24925                 Re:Re:Re:Re: 우~아~ (우비소녀..) 김원주 793 2003/03/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.