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을 화면에 그린다는 얘기죠.
도움이 되셨는지... ^^
찌요리~~ 님이 쓰신 글 :
: TPageControl 과 TToolBar 컨트롤에 각 각 TTabSheet, TToolButton 을 만들고
:
: Object Treeview 윈도우를 보면, 다른 컨트롤 과는 약간 틀린점이 보입니다
:
: TabSheet1,TabeSheet2.. 혹은 ToolBar1,ToolBar2.. 등이 반투명한 흐린색으로
:
: 표시되죠. 그리고 이것들은 Copy&Paste 가 안되는 넘들입니다.
:
: ( 이거 아무렇지 않게 보여두 실제 컴포넌트 만들때 보니깐 요상한 겁니다. ㅡ_ㅡ;; )
:
:
: 그럼 본론으로 들어가서, 위에꺼랑 비슷하게 만들려고 하는 컴포넌트가 있습니다.
:
: 컴포넌트 만들때 컴포넌트 에디터를 하나 만듭니다. 거기에 Verb하나를 추가하구요
:
: 거기다 IDesigner.CreateComponent 함수를 이용해서 IDE가 컴포넌트를 생성하도록 만들죠
:
: 일반적인 방법이긴 한데.... 문제는 위에꺼처럼 흐린색으로 표시가 안됩니다.
:
: 만들려구 하는 컴포넌트가 TPanel1 그리고 TTabSheet처럼 TPanel1에만 올라가는
:
: 컴포넌트가 TInplace 라구 하면 TInplace가 Copy&Paste가 되버리는 사태가 발생합니다.
:
: 음... 예를 들어 아래와 같은 코드가 있다면, (설명이 위에껄루 충분하긴 한데...쩝.. ㅡ_ㅡ)
:
: 부분 부분만 발췌해서 올립니다.
:
:
: ////////////////////////////////////////////////////////////////////
: unit Panel1;
: {중략..}
:
: TInplace = class(TPanel)
: public
: constructor Create(AOwner: TComponent); override;
: end;
:
: TPanel1 = class(TPanel)
: private
: FInplaces: TList;
: function GetInplaces(Index: Integer): TInplace;
: public
: constructor Create(AOwner: TComponent); override;
: destructor Destroy; override;
: procedure Add(Inplace: TInplace);
: property Inplaces[Index: Integer]: TInplace read GetInplaces;
: end;
:
: procedure TPanel1.Add(Inplace: TInplace);
: begin
: FInplaces.Add(Inplace);
: Inplace.Parent := Self;
: Inplace.Visible : = True;
: end;
:
: //////////////////////////////////////////////////////////////////
: unit RegPanel1;
:
: {중략..}
:
: procedure TPanel1Editor.ExecuteVerb(Index: Integer);
: var
: NewComponent: TComponent;
: begin
: case Index of
: 0: begin
: if not Designer.IsSourceReadOnly then
: begin
: NewComponent := Designer.CreateComponent(TInplace, nil, -1, -1, -1, -1);
: TPanel1(Component).Add(TInplace(NewComponent));
: end;
: end;
: 1: begin
:
: end;
: end;
: end;
: {중략... }
:
: ////////////////////////////////////////////////////////////////////////
:
: 폼 디자인시 위의 함수가 실행되게쪄?
: 그러면 Panel1 위에 Inplace1 이 살짝 올라갑니다~~~~ (여기까진 넘 쉬우니깐..히~~~ ^^)
: 근데... Inplace1에서 (Ctrl + X) 키를 누르고,
: 폼위에서 (Ctrl+V) 키를 누르면?
:
: 폼위에 Inplace1이 올라갑니다 ( ㅡ_ㅡ;;; 커헉~~~~ ) 리드 온리가 안되여
: Obejct Treeview 에 반투명하게 보이게 컴포넌트 생성하는 방법이 있나영?
:
:
: ( 질문이 넘 길었군여... 읽어주셔서 감사 ^_____________^
: 가능하면 답변두 부탁드려영~~~~ )
:
:
|