|
Kenny 님이 쓰신 글 :
: DoEnter, OnEnter도 시도해 봤었습니다만...
:
: 다음과 같은 현상때문에 이용치 못했습니다.
:
: 일단 먼저 붙여드린 예의 경우 TCustomControl을 상속받은 TPopEdit에는
:
: 어떠한 Control 도 붙어있지 않은 상태이구요.. (InsertControl을 한번도
:
: Call하지 않은 상태입니다.)
:
: 이 상태에서는 DoEnter, OnEnter 모두 작동하지 않습니다.
:
: 만약 InsertControl을 통해 TPopEdit( TCustomControl의 Derive Class의 Instance)
:
: 에.. Child Control들을 포함하게 되면. 해당 Child Control에 Focus가 가게 될때..
:
: TPopEdit의 Overide된 DoEnter가 실행되거나 혹은 OnEnter가 발생합니다.
:
: 역시 TPopEdit의 바닥...(컨트롤이 없는 TPopEdit의 Component영역)을 클릭했을 경우는
:
: Focus가 잡히지 않더군요..
:
: 이때문에 Message를 직접 잡으려 했던건데.... 왜그런지 혹시 아십니까?
:
: ---------------------------------------
: 현재 작성한 에디트 컨트롤은 TCustomControl 을 상속 받아 TScrollBar를 오른쪽과 아래에 붙이고.
:
: 에디트 컨트롤 (TCustomControl을 상속받은 클래스의 인스턴스)의 Canvas에 직접 출력을 하고 있습
:
: 니다. 이 상황에서 말씀하신대로 DoEnter나 OnEnter를 이용하게 되면
:
: 스크롤바에 Focus가 갈때는 에디트 컨트롤의 포커스가 잡히지만..
:
: 글씨가 출력된 에디트컨트롤의 자체영역(Canvas->xx를 통해 출력된 텍스트가 있는 영역)은
:
: 아무리 클릭해도 Focus가 잡히지 않습니다.
:
: ---------------------------------------
:
: Child Control들 말고... 해당 클래스의 Focus가 잡히게 할 방법 없을까요?
:
:
:
:
어짜피 키보드로는 제대로 되니까 마우스만 해결하면 됩니다.
TControl의 Click과 DblClick 메서드를 오버라이드해서 그 메서드 내부에서 SetFocus()를 해주면 되긴하는데 이게 정석인지는 모르겠군요.
(물론, 오버라이드한 메서드 내에서는 TControl의 해당 메서드를 호출해주어야 겠죠).
WM_MOUSEACTIVATE:
해당 컨트롤의 영역 내부를 클릭할 때마다 발생
포함된 컨트롤을 클릭해도 발생
WM_SETFOCUS:
해당 컨트롤 자체가 키보드 입력 초점을 얻을 때 발생
마우스로는 안 됨(키보드로는 가능)
WM_KILLFOCUS:
해당 컨트롤이 키보드 입력 초점을 잃을 때 발생
포함된 컨트롤로 키보드 입력 초점이 이동해도 발생
키보드든 마우스든 상관 없음
DoEnter:
포함된 컨트롤이든 자신이든 키보드 입력 초점을 얻을 때 실행됨
자신인 경우 마우스 클릭으로는 안 됨
DoExit:
키보드 입력 초점을 컨트롤 외부로 빼앗길 때 실행됨
키보드든 마우스든 상관 없음
|