C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[332] TreeView에서 먗가지 사용방법입니다.
민병권 [minbk] 8166 읽음    2002-05-08 15:16
이 방법들이 가장 효율적인지 모르겠지만, 제가 사용한 바로는 이상 없기에 글을 올립니다.
다들 아시는 내용이겠지만, 그래도 저처럼 모르는 분들께 도움이 되었으면 합니다.

* 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;
    }
}

+ -

관련 글 리스트
332 TreeView에서 먗가지 사용방법입니다. 민병권 8166 2002/05/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.