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
[57457] 감사합니다.(냉무)
일월영측 [kimysh] 855 읽음    2009-07-02 14:20
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;
: :                    }
: :                 }
: :
: :             }
: :         }
: :     }

+ -

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