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
[37027] Re:Re:Re:[질문] 컴포넌트가 메세지를 잡지 못합니다.
임문환.실업자 [origin] 911 읽음    2004-08-28 14:02
Starlet 님이 쓰신 글 :
: 답변 고맙습니다.
: 그런데 제가 만들려고 하는 컴포넌트는 Non-Visual로 메세지에 반응하여 동작하는 컴포넌트입니다. 아래 소스는 예제로 만든것이고 실제로는 WM_SIZE가 아닌 사용자정의 메세지를 받아 동작하도록 하려고 합니다. 이런 컴포넌트는 어떻게 해야 할까요?
:

non-visual 컴포넌트여서 사용자가 키보드 또는 마우스로 해당 컴포넌트를 조작할 수 없으므로 관련 이벤트는 외부로부터 발생하지 않습니다.
따라서, 컴포넌트 자체에서 이벤트가 시작되어야 하고 이벤트 발생 조건을 해당 컴포넌트에서 결정해야 합니다.
예를 들어, 컴포넌트 내부에 문자열 버퍼가 있는데 이 버퍼가 다 차면 어떤 이벤트를 발생시킨다는지 하는...
이럴 경우,
Classes.hpp에 선언된 아래 TNotifyEvent 형을 사용하든지
typedef void __fastcall (__closure *TNotifyEvent)(System::TObject* Sender);
다른 형으로 하려면 아래와 같이 별도로 만들어서 사용합니다.
typedef return_type __fastcall (__closure *TMyNotifyEvent1)(System::TObject* Sender,param2_type,param3_type,등);
위와 같이 메시지 형을 선언한 다음 아래와 같이 합니다.
class TMyComponent:public TComponent
{
  TMyNotifyEvent1 FOnEvent1;
  중략.
__published: //이 영역에 선언된 것들은 Object Inspector에 나타납니다.
  TMyNotifyEvent1 FOnEvent1 OnEvent1={read=FOnEvent1 ,write=FOnEvent1,default=NULL };
};

//이 메서드가 어떤 메서드가 될지는 필요에 따라 다르겠습니다.
TMyComponent::SomeMethod()
{
  if(FOnEvent1)
{
  bool  fire_the_event=false;
  //관련 이벤트를 발생시킬지 여부를 조사 하여 발생시킬 조건이 되면 fire_the_event=true;로 설정한 후
   if(fire_the_event)  FOnEvent1(this,param2,param3,등등);
}
}


한편, 사용자 정의 메시지를 만들려면 RegisterWindowMessage Windows API 함수를 사용합니다.
그런데, TComponent는 Window Handle이 없어서 이 메시지를 받을 수 없을 것입니다.

+ -

관련 글 리스트
37020 [질문] 컴포넌트가 메세지를 잡지 못합니다. Starlet 855 2004/08/28
37024     Re:[질문] 컴포넌트가 메세지를 잡지 못합니다. 임문환.실업자 822 2004/08/28
37025         Re:Re:[질문] 컴포넌트가 메세지를 잡지 못합니다. Starlet 786 2004/08/28
37027             Re:Re:Re:[질문] 컴포넌트가 메세지를 잡지 못합니다. 임문환.실업자 911 2004/08/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.