답변은 고마운데...... ^^ 핀치가 잘 안맞은듯....
음....
TCollection 과는 전혀 다른 것입니다. TCollectionItem은 TPersistent 로 부터 상속받습니다.
다수의 컨트롤을 소유할 필요 없이, 컨트롤이 필요로하는 다수의 객체(자신의 정보 영속성?...
dfm에서 읽고 쓰는 기능만을 가지면 충분한 객체)를 쉽게 작성할 수 있게 제공되는 헬퍼 클래스입니다.
물론 VCL내부에서도 쓰이고요 일반적인 계층관계를 보더라도 TTabSheet, TToolButton 들은 퐁디자인시
올라가는 것이기 때문에 당연히 TComponent로 부터 상속 받습니다. TTabSheet는 TWinControl로 부터,
TToolButton는 TGraphicControl로 부터 상속을 받습니다. 전부 TComponent 자식들이죠
질문을 다시 드리면...
그런데, TPageControl, TToolBar 컨트롤은 TTabSheet나 TToolButton이 화면에 뿌려지는 컴포넌트
이기 땜시, TGraphicControl이나 TWinControl에서 상속 받은 컴포넌트를 TList에 저장하고 있습니다
(컬렉션이 아닙니다). TTabSheet나 TToolButton등의 컴포넌트들의 특징은 폼디자인시 Copy&Paste가
안되도록 막아놓았다는 점이 틀립니다. 그리고 ObjectTreeview 에서도 반투명한 흐린색으로 아이콘이
보이게 됩니다.
이 두 컴포넌트는 Copy&Paste가 안될 뿐더러, 반드시 컴포넌트에디터의 메뉴에서 밖에는 추가될수
없기 때문에, 디자인시 폼위나 기타 TControlStyle의 csAcceptsControls이 셋된 컨트롤이라구 해도
올려놓을 수가 없게 되어 있습니다. 제가 구현할 수 없었던 부분은...컴포넌트 에디터를 만들고 나서,
Copy&Paste를 막질 못하기 때문에 엉뚱하게... 패널이나 폼위에 올려질수 있는 사태가.....
( 쩝....VCL 소스 뒤지다가 포기수준...언젠간 알게 되게쬬... ㅜ_ㅜ
VCL 소스에도 TPageControl, TToolBar의 컴포넌트 에디터는 없더군요...)
박정모 님이 쓰신 글 :
:
:
: TDBGrid를 Double click 하면 Column리스트가 나오는건 아시죠? 그 Column리스트위에 있는
: 각각의 Column은 TColumn의 object입니다.
:
: TColumn에 대한 help를 보면 TObject -> TPersistent -> TCollectionItem -> TColumn
: 의 상속관계를 가지는 것을 알 수 있습니다. 그러니까 TColumn은 TComponent를 조상으로 하지
: 않죠. TColumn은 Form위에 올릴 수 없습니다. 그 이유는 Form위에 올리기 위해서는 반드시
: 조상을 TComponent으로 해야 하기 때문입니다.
:
: 님께서 말씀하신 TToolBar의 각 단추는 TComponent를 조상으로 하지 않습니다. 아마도,
: TCollectionItem을 조상으로 한 Item일 것 입니다.
:
: TCollectionItem을 조상으로 하는 class는 스스로 graphical로 화면에 표현되지 못합니다.
: TCollectionItem은 TCollection의 한 Item이 되며 이 TCollection을 소유한 class는
: 일반적으로 TComponent를 조상으로 하면서 TCollectionItem을 화면에 직접 그립니다.
:
: 그러니까, TCollectionItem, TCollection을 소유하고 있는, TComponent를 조상으로 하는
: class가 직접 그 Item을 화면에 그린다는 얘기죠.
:
: 도움이 되셨는지... ^^
:
:
|