|
Edit1OnClick 메소드가
Edit1 에만 걸려있구 직접 코딩으로 Edit1OnClick를 호출하지 않는다면?
Edit1OnClick 메소드가 호출되기 전에 이미 Edit1은 Focused 되어있습니다.
즉 Edit1->SetFocus()는 아무 의미없는 코드입니다.
마우스 클릭이 아닌 Tab을 클릭해서 Focus를 바꾸거나
코딩으로 Focus를 바꾸면 Edit1OnClick 메소드가 호출되지 않을것이구요
Edit가 Focus In / Out 이벤트를 받고 싶다면?
WM_SETFOCUS 와 WM_KILLFOCUS 메세지를 잡아서 처리하시면 됩니다.
WM_SETFOCUS 메세지는 Edit 에게 Focus를 주는 메세지이구
WM_KILLFOCUS 메세지는 그 반대입니다.
메세지를 어떻게 잡냐구요?
- sub-classing으로 하셔도 되구...
- Application의 OnMessage 이벤트 핸들러를 이용하셔도 됩니다.
그럼..
c언어 초보 님이 쓰신 글 :
: 제가 지금 Edit 컨트롤의 포커스에 관한 이벤트를 만들려고 합니다.
: Edit1에 대해 onClick 이벤트가 발생한다면
: void __fastcall Form1::Edit1OnClick(TObject *Sender)
: {
: Edit1->SetFocause();
: }
: 뭐 대충이렇게 작성하면 될것입니다.
:
: 만약에 Edit1의 포커스가 해제되는 이벤트를 캐치할려면 어떻게 해야 될까요?
: 다른 버튼을 누르거나 다른 이벤트가 발생한다면 분명 Edit1의 포커스는 해제될겁니다.
: 그렇다면 정작
:
: if(Edit1->Focaused == false)
: {
: ....실행함수()
: }
:
: 위 구문을 어떤 이벤트에 등록하여야 Edit1->Focaused == false를 캐취할 수 있을까요?
|