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

C++빌더 Q&A
C++Builder Programming Q&A
[57432] Re:ListView 질문입니다.
skjoon [skjoon] 2466 읽음    2009-06-29 11:01
사용하신 소스가 CustomDrawItem 이벤트 핸들러 안에 있는 건가요?
CustomDrawItem 이벤트는 각 아이템을 새로그릴때마다 발생하니까 이벤트 핸들러의 아규먼트로 넘어오는 Item 만 갖고 비교를 하시면 될 것 같습니다. 그리고 문자열 중 "abc"가 포함되어 있는지 확인하시려면 AnsiString::Pos()함수를 사용하시면 되겠습니다.

다음은 리스트뷰를 초기화하는 부분입니다. 테스트를 위해서 값을 넣는 것이죠.
void __fastcall TForm2::Button1Click(TObject *Sender)
{
    // 리스트뷰 아이템 초기화

    TListItem* item = NULL;

    if(ListView1->Items->Count)
        ListView1->Items->Clear();

    // 리스트뷰에 10개의 아이템을 추가합니다.
    for(int i = 0; i < 10; i++) {
        item = ListView1->Items->Add();
        if(item) {
            item->Caption = "Caption " + IntToStr(i);
            item->SubItems->Add("SubItem " + IntToStr(i) + "-0");
            item->SubItems->Add("SubItem " + IntToStr(i) + "-1");
        }
    }

    // 리스트뷰의 아이템 중 다음 세 아이템의 캡션을 다음과 같이 변경합니다.
    ListView1->Items->Item[1]->Caption = "abcd";
    ListView1->Items->Item[3]->Caption = "123abcd";
    ListView1->Items->Item[5]->Caption = "123ab cd";
}
//---------------------------------------------------------------------------


이벤트 핸들러입니다.
void __fastcall TForm2::ListView1CustomDrawItem(TCustomListView *Sender,
      TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
    // 아이템의 캡션 문자열 중 "abc"가 포함되어 있으면 폰트의 색을 파란색으로 합니다.
    if(Item->Caption.Pos("abc")) {
        ((TListView*)Sender)->Canvas->Font->Color = clBlue; // 컬러다이얼로그를 이용해 선택된 색을 사용.
    }
}


일월영측 님이 쓰신 글 :
: CustomDrawItem을 이용하여 ListView의 캡션에 존재하는 단어를 검색을 하여 특정 단어가
:
: 들어가 있는 라인의 색을 변경하려 합니다.
:
: ColorDialog를 이용하여 색을 지정을 했습니다.
:
: 근데 이상하게도 'abc'를 검색을 하면 'abc'가 들어가 있는 문장 전체가 색 변경이 되어야 되는데
:
: 문자열 길이가 다른 것에는 색 변경이 되질 않습니다.
:
: 이것을 해결 하고싶은데 어떻게 해야 될까요?
:
: 소스는 아래와 같습니다.
:
: char ch[MAX_PATH];
:     int cnt = 0;
:     for( int i=0; i<list->Items->Count; i++ )
:     {
:         memset(ch,0,MAX_PATH);
:         strcpy(ch,list->Items->Item[i]->Caption.c_str());
:         for(int j=0; j<sizeof(ch); j++)
:         {
:             if(ch[j]==m_ch[0])
:             {
:                 for(int k=0;k<sizeof(m_ch); k++)
:                 {
:                    if(ch[j+k]==m_ch[k])
:                    {
:                       casStrTrimLeftRight(m_strSearch,m_strSearch);
:                       if(((k+1)*2)==sizeof(m_strSearch))
:                       {
:                         if(cnt==0)
:                         {
:                             if(ColorDlg->Execute())
:                             {
:                                cnt=1;
:                                m_strColor.sprintf(ch);
:                             }
:                         }
:                         list->Repaint();
:                       }
:                    }
:                    else
:                    {
:                         break;
:                    }
:                 }
:
:             }
:         }
:     }

+ -

관련 글 리스트
57430 ListView 질문입니다. 일월영측 1907 2009/06/29
57432     Re:ListView 질문입니다. skjoon 2466 2009/06/29
57457         감사합니다.(냉무) 일월영측 856 2009/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.