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
[58442] 친절한 답변 감사드립니다..
용맨소녀 [doyongid] 1099 읽음    2009-09-08 11:25
성호님 덕분에 해결할 수 있겠네요.. 지금까지 만들 때마다 계속 이 문제가 걸려도 그냥 넘어갔었는데..

장성호 님이 쓰신 글 :
: ..
: 이것 옛날에 한참 삽질해서 찾아낸 팁으로 좀 갈켜주기 아까운 팁인데...
: ㅋㅋ 농담이구요..
:
: vcl WinControl의 key입력 동작
: Form위에 여러 컨트롤이 있을때
: TMemo , TEdit 등에 키입력을 받는 control에  focus가 있는  않는경우에
: (TButton , TPanel 등...)
: 방향키를 입력하면 다음 또는 이전 Control로 focus가 이동합니다.
: (tab이나 shift-tab을 클릭한 것 처럼...)
:
: --------------------------------------------------------------
:
: 그 이유는?
:
: VCL에서는 PeekMessage로 시스템 메세지 큐에서 메세지를 가져온후에
: 곧바로 해당 윈도우프로시져로 Dispatch하지 않고
: 앞에 몇단계 거칩니다.
:
: Application.OnMessage핸들러 호출
: hint체크 dialog체크 , key체크 등..
:
: 그런후에 해당 윈도우프로시져로 Dispatch 하죠
:
: 그중에 Key메세지인경우 CN_BASE+Message 로 메세지를 변경하여
: wincontrol에 던져봅니다.
: 이때 Edit 나 Memo등은 false를 return_하지만
: Panel같은 놈은 true를 return하여 KeyBoard를 메세지를 받지 않고
: 다음 WinControl이 select되게 됩니다.
:
: ------------------------------------------------------------------------
: TButton / TPanel 등 에서 키보드 입력 받으려면
: 결론적으로 Panel같은 놈에서 방향키나 키보드 메세지를 받으려면
: 다음과 같이 CN_BASE+Key_message를 return해주면 됩니다.
:
:
: void __fastcall TForm1::FormCreate(TObject *Sender)
: {
:     OrgPanelProc=Panel1->WindowProc;
:     Panel1->WindowProc=PanelProc;
: 
: }
: //---------------------------------------------------------------------------
: void __fastcall TForm1::PanelProc(TMessage &Msg)
: {
:   // TPanel 컨트롤에서 키보드 입력을 받게하고
:   // Tab 및 방향키 같은것을 받을수 있도록 ...
:   // if (Msg.Msg >= (CN_BASE +WM_KEYFIRST)) and (Msg.Msg <= (CN_BASE +WM_KEYLAST)) then Exit;
: 
:   if(Msg.Msg==CN_KEYDOWN)return;
:   OrgPanelProc(Msg);
: 
: }
: 

:
: 위와같이 하면 TPanel에 focus가  가 있는 상태에서 방향키를 click하여도 다른 control로 focus가 넘어가지 않고
: panel에서 keyboard메세지를 받을수 있습니다.
:
: 그럼...
:
:
: 용맨소녀 님이 쓰신 글 :
: : 방향키를 누르면 이미지를 이동 출력하는 기능을 만들고 있는데..
: :
: : 해당 폼에 TTrackBar나 TScrollBar같은게 있으면 문제가 생기는군요..
: :
: : 어쩌다 포커스가 그런 컨트롤에 있으면 TrackBar나 ScrollBar가 작동합니다..
: :
: : 포커스가 안가게 TabStop도 설정하고 그러는데, 툴을 다루다보면 어쩌다 포커스가 가는 경우가 있더라고요..
: :
: : 쌈박하게 한 방에 해결하는 방법이 없을까요?

+ -

관련 글 리스트
58428 TTrackBar나 TScrollBar에 KeyDown 이벤트 안주기.. 용맨소녀 1097 2009/09/07
58432     Re:TTrackBar나 TScrollBar에 KeyDown 이벤트 안주기.. 장성호 1363 2009/09/07
58442         친절한 답변 감사드립니다.. 용맨소녀 1099 2009/09/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.