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
[53680] Re:Re:Top,Left값 설정을 위한 절대위치, 원형패널 작성법
kang [] 1314 읽음    2008-06-16 13:52
방법별로 분류한 답변 대단히 감사합니다.
3경우 다 잘 되는 군요 ^^;

아래와 같이 폼의 위치를 지정하는 것은 잘되는데

     Form2->Left=pt.x;
     Form2->Top=pt.y;
     Form2->ShowModal();

그런데 폼대신에 패널은 역시 엉뚱한 장소에서 나타나는군요ㅕ.

      Panel1->Left=pt.x;
      Panel1->Top=pt.y;
      Panel1->Visible = true;

Panel1은 Form위에 위에 놓여져 있는 것으로 visible = false였다가 Form의 클라이언트 내부에서
나타나게 했더니 여전히 원하는 마우스 아래에 위치하지는 않는군요...
어떻게 하면 좋을가요..





장성호 님이 쓰신 글 :
: 1번에 대해...
:
:    - 특정 Control의 절대 위치값을 알아내면 되는거네요?
:    - 그런데 설명을 보내 항상 마우스가 control위에서 메뉴를 띄운다고 하는것을 봤을때
:       마우스좌표만을 알아도 되겠네요

:   방법은 여러가지가 있습니다.
:
: 방법1.  현재 마우스의 위치를 알아오는 함수 GetCursorPos 이용하여
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:     TPoint pt;
:     GetCursorPos(&pt);
:     Form2->Left=pt.x;
:     Form2->Top=pt.y;
:     Form2->ShowModal();
: }
: 

:
: 방법2. 마우스 과련 전역 Object인 TMouse를 이용하여 ...
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:     Form2->Left=Mouse->CursorPos.x;
:     Form2->Top=Mouse->CursorPos.y;
:     Form2->ShowModal();
: }
: 

:
: 방법3. 현재 Active된 Control을 이용하여 ClientToScreen....
:
: void __fastcall TForm1::Button2Click(TObject *Sender)
: {
:     TPoint pt=Point(0,0);
:     pt=Screen->ActiveControl->ClientToScreen(pt);
:     Form2->Left=pt.x;
:     Form2->Top=pt.y;
:     Form2->ShowModal();
: }
: 

:
: Screen 설명
: Screen은 TScreen이라는 class의 전역 Singleton 오브젝트입니다.
: 이 객체에는 현재 프로그램에서 쓰는 모른 Form과 Active된 Form및 Control등을 관리하고 있습니다.
:
:
:
: 두번째 질문에 대해...
: 원형 Panel을 만들고 싶다구요?
: Window를 원하는 모양대로 만들고 싶으면 Region을 이용하시면 됩니다.
:
:
: void __fastcall TForm1::Panel2Resize(TObject *Sender)
: {
:     HWND hRegion=CreateEllipticRgn(0,0,Panel2->Width, Panel2->Height);  //타원형 
:     // HWND hRegion=CreateRoundRectRgn(0,0,Panel1->Width, Panel1->Height,50,50); //Round처리된 사각형
:     SetWindowRgn(Panel2->Handle, hRegion, True);
:     DeleteObject(hRegion);
: }
: 

:
:
: 그럼..
:
:
:
:
:
:
: kang 님이 쓰신 글 :
: : 안녕하세요, 여기저기 뒤지다가 이렇게 또 여쭤봅니다 . 늘 물어만 보는 군요...
: :
: : 폼위에 비트맵버턴, 패널 등 여러가지 컨트롤이 있고 클릭시 지정된 함수를 호출합니다.
: : 각 컨트롤에 대하여 키보드 단축키-HotKey(ShortKey)을 지정하도록 프로그램하여, 사용자가 각 컨트롤에 단축키를
: : 설정할수 있도록 했습니다.
: : 따라서 사용자가 마우스커서를 버턴 등 컨트롤위에  올려놓고 오른쪽 마우스 버튼을 클릭하면 THotKey 컨트롤을 포함한 패널이 Visible->true 되게해서 사용자 입력을 받게 했습니다. 이 THotKey를 포함한 패널이 나타날때 현재 컨트롤(즉 마우스 커서 아래의 컨트롤) 근처 나타나도록 패널의  Top, Left값을 계산해서 먼저 값을 주고 패널을 보이게  나름 코딩을 했지만, 원하지 않는 위치에 나타날때도 있더군요.
: : 즉, 폼위에 3개의 패널 왼쪽, 가운데, 오른쪽을 차지하여 폼 전체를 덮고, 각기 여러 컨트롤을 포함하고 있는데, 가운데 패널에 위치한 컨트롤에 대해서는 잘 동작하는 것 같긴 한데...
: : 질문의 요지를 말하면,
: :
: : 1. HotKey를 포함한 Panel을 hotkeyPanel이라고 가정할 때 hotKeyPanel->Top, hotKeyPanel->Left에 어떤 값을 줘야하는가요?
: :    - 절대좌표를 구하는 ClientToScreen 등의 함수를 사용해봤지만, 폼상의 좌우측패널에 포함된 컨트롤에 대해서는 원하지않는 위치에 패널이 나타나서...--;
: :
: : 그리고 또한가지 질문은..
: : 각 컨트롤의 단축키를 사용자가 확인을 하고자할때를 위해, 각 컨트롤위에 조그만 패널을 올려놓고 캡션으로 키보드 단축키 문자를 캡션하고 단축키보기를 클릭하면 각 컨트롤위의 패널 Visible=true 되게 했습니다.
: : 그런데 패널모양이 사각이라서 보기가 지저분해서리 원형으로 만들고 싶어서 패널위에   Tshape(원형)올리고 그위에
: : Label을 올렸는데   xp테마에서는 예쁘게 잘 보이는데, 그 이전 테마에서 패널의 색깔이 투명하게 되었 마음에 들지않더군요. 따라서 고민 끝에 원형패널을 찾고 있습니다.
: :
: : 2. 버턴 위에 올려놓고 단축키 문자를 표현할 원형패널을 찾고 있습니다...또는 원형 패널을 만들고 싶습니다.
: : 
: : 아시는 알려주시면 대단히 감사하겠습니다.

+ -

관련 글 리스트
53674 Top,Left값 설정을 위한 절대위치, 원형패널 작성법 kang 1379 2008/06/16
53678     Re:Top,Left값 설정을 위한 절대위치, 원형패널 작성법 장성호 1634 2008/06/16
53680         Re:Re:Top,Left값 설정을 위한 절대위치, 원형패널 작성법 kang 1314 2008/06/16
53681             Re:Re:Re:Top,Left값 설정을 위한 절대위치, 원형패널 작성법 장성호 1305 2008/06/16
53683                 Re:Re:Re:Re:Top,Left값 설정을 위한 절대위치, 원형패널 작성법 kang 1462 2008/06/16
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.