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. 버턴 위에 올려놓고 단축키 문자를 표현할 원형패널을 찾고 있습니다...또는 원형 패널을 만들고 싶습니다.
:
: 아시는 알려주시면 대단히 감사하겠습니다.