|
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이 없어서 이 메시지를 받을 수 없을 것입니다.
|