skjoon 님이 쓰신 글 :
: 사용하신 소스가 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;
: : }
: : }
: :
: : }
: : }
: : }