|
조대현.Clau 님이 쓰신 글 :
: 1) ImageList에 확대, 축소시의 아이콘을 모두 집어넣고 상태에 따라 번호를 바꾸어 주면 됩니다.
: VirtualTreeView의 GetImageIndex 이벤트를 이용합니다.
:
: void __fastcall TFormDCPSelect::TreeDCPGetImageIndex(TBaseVirtualTree *Sender,
: PVirtualNode Node, TVTImageKind Kind, TColumnIndex Column, bool &Ghosted,
: int &ImageIndex)
: {
: SDCPTree *dtDCP;
: int iLevel;
:
: // 선택과 일반상태의 Node일때
: if(Kind == ikNormal | Kind == ikSelected){
: // Node가 가지는 구조체얻기
: dtDCP = (SDCPTree *)Sender->GetNodeData(Node);
:
: // ImageList에 홀수(1,3,5...)는 축소아이콘
: // ImageList에 짝수(0,2,4...)는 확대아이콘
:
: // Node의 Level(깊이, 즉 최상위 Node로 부터 몇번째 Child인지) 구하기
: iLevel = Sender->GetNodeLevel(Node);
:
: // 현재 Node가 확장 상태인지 판단
: // ImageIndex는 현 Node의 이미지를 그릴 ImageList Index
: if(Sender->Expanded[Node]){
: // Expand
: ImageIndex = iLevel * 2 + 1;
: }else{
: // Collapse
: ImageIndex = iLevel * 2;
: }
: }
: }
:
: 2) 아래는 확대/축소에 관계된 VirtualTreeView Demo소스입니다. 저도 이거보고 했습니다^^ 다른방법은 몰겠네요.
:
: procedure TDrawTreeForm.VDT1GetImageIndex(Sender: TBaseVirtualTree; Node: PVirtualNode; Kind: TVTImageKind;
: Column: TColumnIndex; var Ghosted: Boolean; var Index: Integer);
: var
: Data: PShellObjectData;
: begin
: if Column = 0 then
: begin
: Data := Sender.GetNodeData(Node);
: case Kind of
: ikNormal,
: ikSelected:
: begin
: if Sender.Expanded[Node] then
: Index := Data.OpenIndex
: else
: Index := Data.CloseIndex;
: end;
: ikOverlay:
: if (Data.Attributes and SFGAO_SHARE) <> 0 then
: Index := 0
: else
: if (Data.Attributes and SFGAO_LINK) <> 0 then
: Index := 1;
: end;
: end;
: end;
|