|
투명폼 뒤에 있는 폼에서 마우스(Cursor)위치의 Control을 찾는 방법에 혹 문제가 있는것 아닌가요?
[WinControl의 Controls배열에 대해..]
TForm을 포함하여 TWinControl은 (TPanel , TPageControl , TButton...등)은
Controls라는 배열과 ControlCount라는 프로퍼티가 있습니다.
이 배열에는 WinControl 을 parent로 가진 GraphicControl이나 WinControl이 들어있습니다.
예를들어 Form위에 Panel1 , Panel2 가 있구 Panel1 위에 Button1 이 있다면
Form->Controls 배열에는 Panel1 과 Panel2가 있구
Panel1->Controls 배열에 Button1이 있는것이죠
[Controls배열에 담긴 순서]
그리고 Controls배열에 담겨진 순서는
GraphicControl( TLabel , TBevel , TSpeedButton , TImage...) 이 앞쪽에 있구
WinControl이 뒷쪽에 있습니다.
그러니까 화면의 맨 앞쪽에 보이는 컨트롤이
Controls배열의 맨 마지막 index에 있는것이죠
폼의 경우는...
Form->Controls[Form->ControlCount -1];
[Cursor위치의 Control찾기]
위 Controls배열을 이용하여 Cursor(마우스)위치의 Control을 찾을수 있습니다.
1) 위에 설명했듯이 맨 앞쪽에 있는것이 배열 맨 마지막 Index에 있으니
찾을때 뒷쪽에서 부터 찾아야 겠죠
2) 그리고 또 중요한것은
Form,Frame , Panel, PageControl 등의 다른 Control을 포함하는 Control의 경우
현재 Cursor아래 Control은 포함하고 있는 Control중에 하나일수도 있겠죠~!
그러니까 Child-Control이 있는경우에는 다시 반복해야겠죠
3) 그리고 Control의 좌표는 Parent-Control에 상대 좌표이므로
ScreenToClient를 잘 해야하구요..
그럼..
박진수 님이 쓰신 글 :
: 안녕하세요
:
: 현재 폼 위에 패널이 여러개 있는 상황이고, 그 패널들 위에 투명한 폼이 얹어져 있습니다.
:
:
: 제가 원하는 기능은 마우스가 패널에 올라갔을때 패널에 해당하는 지정된 힌트가 나오는건데요.
:
: 투명폼 좌표 아래에 패널이 있는지 없는지 확인해서 있으면 폼에 힌트가 나오게 했습니다.
:
: 그런데 이 방법은 패널들이 겹쳐있으면 사용이 안되더군요.
:
: ex)A패널이 B패널을 반쯤 덮고 있는 상황에서,
:
: A패널의 힌트가 나오고 있는데 마우스를 움직여서 바로 B패널로 이동하면 B패널의 힌트가 안나오더군요.
:
: 아무것도 없는곳에 갔다가 B패널에 가면 힌트가 제대로 나오는데 바로 갔을때만 이런 현상이 나오더군요.
:
: 이거 어떻게 해결 할 수 있는 방법이 있을까요?
|