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
[64485] Re:Re:콤포넌트 이벤트 에관하여 질문이있어요
박목월 [godori21] 950 읽음    2011-05-31 18:53
답변 감사합니다
전 콤포넌트의 메세지는 일반적인 메세지하고 다른가싶었거든요
콤포넌트도 만들고 연습도 할겸 배울겸 만드는거에요 뭐든지
해봐야 늘지않겠어요?
답변 감사합니다



장성호 님이 쓰신 글 :
: 컴포넌트를 만들고 계시는것 같으데요
: 몇가지 참고글을 적으면..
:
: 1. WM_KEYDOWN 메세지를 써야하는것이 맞는것 같구요
:
: 2. CM_xxx , CN_xxx 는
:     VCL에서 만들어낸 메세지거나, 필요에 의해 변경한 메세지 입니다.
:
: 3. 그리고..
:     MESSAGE_MAP을 이용하여 메세지를 sub-classing 하는것 보다
:     이미 TControl 클래스에서 WM_KEYDOWN관련 메세지는 처리되어있습니다.
:
:     그것을 오버라이딩 해서 쓰는것이 더 좋을것 같습니다.
:
:     그래야 OnKeyDown이벤트 등 기타 동작코딩을 따로 해주지 않아도 간단히 처리할수 있기 때문이죠
:
:     DYNAMIC void __fastcall KeyDown(System::Word &Key, Classes::TShiftState Shift);
:
:     위와 같이 TWinControl에 Dynamic( Virtual로 비슷한 놈임) 으로 선언되어있으니
:     이놈을 똑같이 DYNAMIC  키워드를 써어 오버라이딩 해서 컴포넌트를 만들면 좋을것 같습니다.
:
:
: 그럼..
:
:
: 박목월 님이 쓰신 글 :
: : 우선 헤더파일엔 아래처럼 되어있습니다
: :
: : typedef void (__closure *KeyInput)(System::TObject *Sender, Word &Key);
: : class PACKAGE TPangyas : public TCustomControl
: : {
: : private:
: : 	KeyInput FKeyDown;
: : protected:
: : 
: : 
: : public:
: : 	__fastcall TPangyas(TComponent* Owner);
: : 	MESSAGE void __fastcall VNKey_Downs(TMessage &Message);
: : BEGIN_MESSAGE_MAP
: : 	MESSAGE_HANDLER(CM_APPKEYDOWN,TMessage,VNKey_Downs);
: : END_MESSAGE_MAP(TCustomControl)
: : 
: : __published:
: : 	__property KeyInput OnKeyDowns = {read=FKeyDown,write=FKeyDown};
: : };
: : 

: : 그리거 cpp파일엔 이렇게 되어있습니다
: :
: : static inline void ValidCtrCheck(TPangyas *)
: : {
: : 	new TPangyas(NULL);
: : }
: : //---------------------------------------------------------------------------
: : __fastcall TPangyas::TPangyas(TComponent* Owner)
: : 	: TCustomControl(Owner)
: : {
: : }
: : //---------------------------------------------------------------------------
: : namespace Pangyas
: : {
: : 	void __fastcall PACKAGE Register()
: : 	{
: : 		TComponentClass classes[1] = {__classid(TPangyas)};
: : 		RegisterComponents("Standard", classes, 0);
: : 	}
: : }
: : //---------------------------------------------------------------------------
: :  MESSAGE void __fastcall TPangyas::VNKey_Downs(TMessage &Message)
: : {
: : 	if(FKeyDown)
: : 	        FKeyDown(this,Message.WParamLo);
: : 

: : 이렇게 해뒀습니다
: : 그런대해보니 동작이 되지 않습니다
: : CN_KEYDOWN 메시지로해봐도그렇고요
: : CM_MOUSEENTER 로 해보니 잘되더군요
: : 근데 키입력이 CN_KEYDOWN이 맞는건가요? 키입력 이벤트는 어떤걸써야되는지요
: : 위소스에서 잘못된 부분은 어떤것인지 잘못된거면
: : 어떻게 수정해야되는지 알려주세요
: : 자꾸 이것만 건드리고있는데 당췌 안되네요

+ -

관련 글 리스트
64477 콤포넌트 이벤트 에관하여 질문이있어요 박목월 801 2011/05/31
64481     Re:콤포넌트 이벤트 에관하여 질문이있어요 장성호 815 2011/05/31
64485         Re:Re:콤포넌트 이벤트 에관하여 질문이있어요 박목월 950 2011/05/31
64479     Re:콤포넌트 이벤트 에관하여 질문이있어요 이길남.HoPe 849 2011/05/31
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.