이 방법들이 가장 효율적인지 모르겠지만, 제가 사용한 바로는 이상 없기에 글을 올립니다.
다들 아시는 내용이겠지만, 그래도 저처럼 모르는 분들께 도움이 되었으면 합니다.
* Item_Tree <-- 제가 사용한 TreeView Name.
1. TreeView에서 선택한 Item의 아이콘을 폴더가 열린 아이콘으로 항상 선택한다.
먼저, TImageList에 폴더가 닫힌 아이콘 1개( index 0 ),
폴더가 열린 아이콘 1개( index 1 )를 이미지에 포함합니다.
void __fastcall TForm_State::Item_TreeGetImageIndex(TObject *Sender,
TTreeNode *Node)
{
Node->SelectedIndex = 1;
}
2. ITEM의 TEXT나 아이콘 이외의 부분을 선택한 경우 체크.
즉, 데이타가 없는 부분을 클릭 했나를 체크합니다.
( 보다 자세한 내용은 도움말을 참고 하세요, )
void __fastcall TForm_State::Item_TreeMouseUp(TObject *Sender,
TMouseButton Button, TShiftState Shift, int X, int Y)
{
THitTests HT = Item_Tree->GetHitTestInfoAt(X, Y);
TNodeAttachMode AttachMode;
TTreeNode *pItem = Item_Tree->GetNodeAt(X, Y);
if (!HT.Contains(htOnItem)){ <-- ITEM의 TEXT나 아이콘을 클릭하지 않았으면
return;
}
Item_Tree->Selected = Item_Tree->GetNodeAt(X, Y);
}
3. ITEM TEXT의 문자색 바꾸기.
이 부분도 도움말을 참고 하세요.
void __fastcall TForm_State::Item_TreeCustomDrawItem(
TCustomTreeView *Sender, TTreeNode *Node, TCustomDrawState State,
bool &DefaultDraw)
{
TRect NodeRect;
// 선택한 ITEM의 색상 변경
if (State.Contains(cdsSelected)){
Item_Tree->Canvas->Font->Assign(Item_Tree->Canvas->Font);
// Item_Tree->Canvas->Font->Color = clRed; <-- 여기에 문자색을 지정해도 되지만
아래 부분에서 다시 변경이 됩니다.
Item_Tree->Canvas->Brush->Color = clAqua; <-- 문자의 배경색 지정
}
if (!DefaultDraw){
if (State.Contains(cdsSelected)){
NodeRect = Node->DisplayRect(true);
Item_Tree->Canvas->FillRect(NodeRect);
}
NodeRect = Node->DisplayRect(false);
NodeRect.Left = NodeRect.Left + (Node->Level * Item_Tree->Indent);
NodeRect.Left = NodeRect.Left + Item_Tree->Indent;
NodeRect.Left = NodeRect.Left + ImageList1->Width;
Item_Tree->Canvas->TextOut(NodeRect.Left, NodeRect.Top, Node->Text);
} // end if
// 문자색을 ITEM의 Level에 따라 일괄적으로 변경합니다.
if (Node->Level == 0){
Item_Tree->Canvas->Font->Color = clBlack;
}
else if(Node->Level == 1){
Item_Tree->Canvas->Font->Color = clGreen;
}
}