상위 컴포넌트를 상속받아서 새로운 컴포넌트를 만들고 싶을 때 필요없는 Property 가 Object Inspector 에 나올때가 있습니다.
상위 class 에서 __published 된 property 들은 하위 class 에서 없앨 수 없습니다. 그러나 보이지 않도록 할 수는 있습니다.
상속받은 Property 들을 완전하게 없애버리는 것은 안되지만 화면에 표시되지 않도록 하는 방법은 있습니다.
TLabel 을 상속받아서 TMyLabel 을 만들고 Hint 속성이 Object Inspector 에 나타나지 않도록 하려면 다음과 같이 합니다.
class PACKAGE TMyLabel : public TLabel
{
private :
public :
__published:
__property AnsiString Hint={};
};
위와 같이 하면 TMyLabel 에서는 Hint 속성이 Object Inspector 에 나타나지 않습니다. 그러나, 없애버린것이 아니기
때문에 Code Completion 에서는 나타나게 됩니다. read , write 를 지정해 주지 않았기 때문에 사용할 수는 없습니다.
만약 내가 원하는 속성만 가지도록 하려면 좀 더 상위 class 로부터 상속받아야 합니다.
위 방법을 응용하여 Event 도 나타나지 않도록 할 수 있습니다.
만약, OnClick 이벤트가 나타나지 않도록 하고 싶다면 다음과 같이 합니다.
class PACKAGE TMyLabel : public TLabel
{
private :
public :
__published:
__property TNotifyEvent OnClick={};
};
상위 class , 예를 들어 TCustom ... 으로 시작하는 것들은 property 가 protected 로 되어 있습니다. 즉, 하위 class 에서
상속받아서 __published 섹션에 넣어야 나타나는 것입니다. 이것을 이용하면 원하는 property 만 나오게 하기 위해서
TCustom... 으로 부터 상속받아서 원하는 것만 __published 에 넣으면 됩니다. 하지만, Hint 같은 것들은 어쩔 수 없이
나타납니다. 그것마저 보이지 않게 하려면 위의 방법을 써야 합니다. 제대로된 방법은 아니고 그야말로 꼼수입니다.
P.S. :
반대로 할아버지(?) class 에서 상속받았으나 아버지 class 에서 나타나지 않은 property 가 있을 수 있습니다.
TCustomControl 은 Canvas property 가 있지만 후손인 TCustomPanel 은 Canvas 를 보여주지 않습니다.
따라서 TCustomPanel 을 상속받은 TPanel 에서는 Canvas property 가 나타나지 않습니다.
단지 보여주지 않는 것이지 없는 것은 아니므로 보이도록 만들면 됩니다.
class TMyPanel : public TPanel
{
public:
__property Canvas;
};
김태선 님께서 올려주신 팁이 있으므로 자세한 것은 그것을 참고하세요.
http://cbuilder.borlandforum.com/impboard/impboard.dll?action=read&db=bcb_tip&no=546