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
[69400] Re:Re:Re:PopupMenu의 좌표값 기준 설정하기(?)
장성호 [nasilso] 2687 읽음    2013-04-25 14:07
TTreeView의 OnContextPopup이라는 이벤트가 있습니다.
거기서 Mouse좌표를 변경도 가능하고 PopupMenu중 일부를 보이게 안보이게도 가능하며
또는 Handled라는 변수를 true로 해주면 Menu가 뜨지 않게도 됩니다.

// 다음과 같이 코딩하면 Node가 있는 위치에 우클릭할때만
// PopupMenu가 뜨겠네요
void __fastcall TForm8::TreeView1ContextPopup(TObject *Sender, TPoint &MousePos, bool &Handled)
{
	TTreeNode* pNode  = TreeView1->GetNodeAt(MousePos.x, MousePos.y);
	if(pNode==NULL)Handled=true;

}



그리고 TreeView1MouseDown의 x,y좌표를 Screen전역 좌표로 변경하는것은

TreeView1->ClientToScreen 함수를 쓰면 됩니다.

반대로 전역 좌표를 TreeView기준좌표로 변경하려면
TreeView1->ScreenToClient를 쓰시면 되구요

그럼..




압9정 님이 쓰신 글 :
: 음 그렇게 해봤는데요. Node가 아닌 빈공간을 우클릭 해도 Popup 창이 뜨더라고요.ㄷ
:
: Node 위에서 우클릭 시에만 Popup창이 뜨도록 할려고 TreeView1MouseDown을 사용해봤는데요...
:
: 별로 안좋은 방법인건 가요?ㅜ
:
: 아니면 PopupMenu  프로퍼티를 사용하고 Node에서 우클릭 시에만 Popup창을 띄우는 방법좀 알려주세요.ㅜㅜ
:
: 장성호 님이 쓰신 글 :
: : 음..
: :
: : 1) TreeView1MouseDown 코드를 모두 지우시구요
: :
: : 2) TreeView1의 PopupMenu  라는 프로퍼티가 있습니다.
: :        designtime도 좋구 코딩으로도 좋구
: :       TreeView1->PopupMenu 에 PopupMenu1을 연결하세요
: :
: : 그러면 아무 코딩필요없으 원하는 위치에 Popupmenu가 뜰것입니다.
: :
: : 3) 만약 TreeView의 마우스 오른쪽 버튼 클릭시 해당위치의 Node가 선택되게 하려면..
: :      TreeView의 RightClickSelect라는 프로퍼티를 true로 해주시면 됩니다.
: :      (해당 프로퍼티가 없는 구버젼의 경우엔 Select관련 코딩은 해주셔야 하구요)
: :
: :
: : 그럼..
: :
: :
: : 압9정 님이 쓰신 글 :
: : : 질문 제목이 좀 이상하네요...ㄷ
: : :
: : : TreeNode에서 Node에서 마우스 오른쪽을 클릭하면 PopupMenu1->Popup(X, Y); 을 하여 클릭한 위치에서 Popup을 띄우고 싶습
: : :
: : : 니다. 지금 밑에 있는 코드로 실행하면 X와 Y의 값은 TreeView가 기준이지만 Popup(X, Y) 함수에서 적용되는  X, Y값은 기준이 윈
: : :
: : : 도우가 되서 첨부한 사진처럼 Popup이 뜹니다. (이해가 가실련지...)
: : :
: : : 제가 하고 싶은 것은 PopupMenu1->Popup(X, Y); 함수에서 적용되는 X, Y값을 TreeView 기준으로 하는 것 입니다.
: : :
: : : 지금 만약 X = 10, Y = 10 이라면 클릭된 위치는 TreeView(0,0) 에서 X 축으로 10, Y 축으로 10 간 것인데,
: : :
: : : PopupMenu1->Popup(X, Y); 함수는 윈도우 모니터 (0,0)을 기준으로 X축으로 10, Y축으로 10만큼 움직인 위치에 Popup창이 띄워
: : :
: : : 지는 것이 문제입니다. 이것을 PopupMenu1->Popup(X, Y); 함수도 TreeView(0,0) 에서 X 축으로 10, Y 축으로 10 간 위치에서 Po
: : :
: : : pup창을 띄우고 싶습니다. (이해하셧기를 바랍니다.ㅠㅠ)
: : :
: : : 결론은 PopupMenu1->Popup(X, Y); 함수가 TreeView(0,0) 에서 부터 X축. Y축 만큼 이동한 위치에서 Popup창을 띄워줬으면 합
: : :
: : : 니다. 방법을 아시거나 도움되는 말씀도 괜찬습니다. 부디 지식을 나누어 주세요.ㅜ
: : :
: : :
void __fastcall TfrmMain::TreeView1MouseDown(TObject *Sender, TMouseButton Button,
: : : 		  TShiftState Shift, int X, int Y)
: : : {
: : : 	int i;
: : : 
: : : 	if ( Button == mbRight )
: : : 	{
: : : 		TTreeNode* pNode  = TreeView1->GetNodeAt(X, Y);
: : : 
: : : 		if(pNode)
: : : 		{
: : : 			if(pNode->Parent)
: : : 			{
: : : 				TreeView1->Selected = pNode;
: : : 				PopupMenu1->Popup(X, Y);
: : : 			}
: : : 		}
: : : 	}
: : : }
: : : //---------------------------------------------------------------------------

+ -

관련 글 리스트
69390 PopupMenu의 좌표값 기준 설정하기(?) 압9정 2087 2013/04/24
69396     Re:PopupMenu의 좌표값 기준 설정하기(?) 장성호 2145 2013/04/25
69398         Re:Re:PopupMenu의 좌표값 기준 설정하기(?) 압9정 1854 2013/04/25
69400             Re:Re:Re:PopupMenu의 좌표값 기준 설정하기(?) 장성호 2687 2013/04/25
69408                 Re:Re:Re:Re:흑흑 감사합니다.(냉무) 압9정 1719 2013/04/25
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.