안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.
잠깐 장난을 쳐보다가.. 문제없이 동작하는 컴퍼넌트를 만들어버렸습니다.
소스를 아래에 첨부합니다. 아래 소스를 각각 헤더와 cpp 파일로 저장한후
컴퍼넌트 메뉴에서 인스톨 컴퍼넌트 메뉴를 선택하여 설치하시면 됩니다. Imp라는
팔레트에 TImpComboBox라는 새 컴퍼넌트가 나올겁니다.
먼저 헤더파일의 소스...
//---------------------------------------------------------------------------
#ifndef ImpComboBoxH
#define ImpComboBoxH
//---------------------------------------------------------------------------
#include <SysUtils.hpp>
#include <Controls.hpp>
#include <Classes.hpp>
#include <Forms.hpp>
#include <StdCtrls.hpp>
//---------------------------------------------------------------------------
class PACKAGE TImpComboBox : public TComboBox
{
private:
Classes::TNotifyEvent FOnCloseUp;
void __fastcall CNCommand(TWMCommand &Message);
protected:
public:
__fastcall TImpComboBox(TComponent* Owner);
__published:
__property Classes::TNotifyEvent OnCloseUp = {read=FOnCloseUp, write=FOnCloseUp};
BEGIN_MESSAGE_MAP
VCL_MESSAGE_HANDLER(CN_COMMAND, TWMCommand, CNCommand);
END_MESSAGE_MAP(TComboBox);
};
//---------------------------------------------------------------------------
#endif
그리고, 아래는 cpp 유닛의 소스입니다.
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "ImpComboBox.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
namespace Impcombobox
{
void __fastcall PACKAGE Register()
{
TComponentClass classes[1] = {__classid(TImpComboBox)};
RegisterComponents("Imp", classes, 0);
}
}
//---------------------------------------------------------------------------
static inline void ValidCtrCheck(TImpComboBox *)
{
new TImpComboBox(NULL);
}
//---------------------------------------------------------------------------
__fastcall TImpComboBox::TImpComboBox(TComponent* Owner)
: TComboBox(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TImpComboBox::CNCommand(TWMCommand &Message)
{
if(Message.NotifyCode == CBN_CLOSEUP)
{
if (FOnCloseUp)
FOnCloseUp(this);
}
else
TComboBox::Dispatch(&Message);
}
별로 복잡하지 않죠? 이 컴퍼넌트를 폼에 놓고 오브젝트 인스펙터에서 이벤트 쪽을
보면, OnCloseUp이라는 새로운 이벤트가 나올겁니다. 말 그대로, 콤보박스의 리스트
박스가 사라질때 발생하는 이벤트입니다.
그럼 도움되시길...
임펠리테리 박지훈이었습니다.
(
http://myhome.thrunet.com/~cbuilder, cbuilder@thrunet.com)