VirtualTree중에서 VirtualStringTree를 쓰다보면 불편한 것 중에 하나가.. Header column을 편집하기 위해서 프러퍼티 에디터를 뒤지는데 영 불편하다는 겁니다. Layout --> Header --> Columns를 들어가야하는데 영 길지요..
TListView처럼 폼 디자이너에서 바로 들어가면 좋겠다 생각이 들더군요. .그래서 간단히 만들어 봤습니다.
우선 Design 프로젝트를 열어야겠지오.. VirtualTree에서 제공하는 설치 프로그램으로 설치했다면 C:\Documents and Settings\All Users\Documents\Soft Gems\Virtual Treeview\Delphi\VirtualTreesD11D.dpk 라는 파일을 열고(와 길다..).. 프로젝트에서 VirtualTreesReg.pas 파일을 엽니다.
그리고 기본 콤포넌트 에디터인 TVirtualTreeEditor를 찾아서 거기서 상속받는 에디터를 하나 만듭시다.
type
TVirtualTreeEditor = class (TDefaultEditor)
public
procedure Edit; override;
end;
TVirtualTreeEditorWithDesignerPopup = class(TVirtualTreeEditor)
public
// for column editor..
procedure ExecuteVerb(Index: Integer); override;
function GetVerb(Index: Integer): string; override;
function GetVerbCount: Integer; override;
end;
그리고 추가된 세 함수를 다음과 같이 구현해줍니다.
procedure TVirtualTreeEditorWithDesignerPopup.ExecuteVerb(Index: Integer);
begin
case Index of
0: ShowCollectionEditor(Designer, Component, TVirtualTreeCast(Component).Header.Columns, 'Columns');
end;
end;
function TVirtualTreeEditorWithDesignerPopup.GetVerb(Index: Integer): string;
begin
case Index of
0: Result := 'Column editor...';
end;
end;
function TVirtualTreeEditorWithDesignerPopup.GetVerbCount: Integer;
begin
Result := 1;
end;
아직 안끝났습니다. 이제 이렇게 만든 것을 등록해줘야하는데요.. 소스 중에서
RegisterComponentEditor(TVirtualStringTree, TVirtualTreeEditor);
RegisterComponentEditor(TVirtualDrawTree, TVirtualTreeEditor);
라고 되어있는 부분을 찾아서
RegisterComponentEditor(TVirtualStringTree, TVirtualTreeEditorWithDesignerPopup);
RegisterComponentEditor(TVirtualDrawTree, TVirtualTreeEditor);
이렇게 콤포넌트 에디터를 바꿉니다. 그리고 패키지를 컴파일 하면... 이제 그림처럼 팝업창에 에디터가 보입니다...
근데 하고보니... VT의 그 복잡한 옵션도 팝업으로 하고 싶다는 생각이 드네요.. 쩝.. 이렇게 하려면 폼을 만들어야하니깐 일단 패스~~
|
강좌나 팁이 더 어울리는 자린것 같아요.