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
[29532] Re:리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기?
방태윤 [nabty] 1150 읽음    2004-04-27 09:16
음..대충 이해가 되는거 같네요.근데 제가 말이 약해서 잘 이해 시킬지 모르겟군요.
ListView1CustomDrawItem는 프로그램에서 필요할때 호출되는 함수고요.
그건 스크롤이 일어났으때나 클릭되었을때나 화면이 복구된다는가 암튼 언제든지
listview의 화면을 갱신할 필요가 있으면 프로그램에서 호출해서 쓰는 함수입니다.
삽입당시에만 호출되는게 아니고요,
물론 삽입시도 화면변경요건에 해당되니까 호출된것입니다.

그러므로
void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
      TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
  if(Item->Caption=="a") ListView1->Canvas->Brush->Color=clYellow;
  else ListView1->Canvas->Brush->Color=clRed;
}

위와 같이 ListView1CustomDrawItem 를 작성하고 실행하면
캡션이 a 인 row는 노랑 그외는 모두 빨강으로 표시될것입니다.
여기서 만약 현재 5번째row 가 빨강인데 노랑으로 바꾸고 싶다면
단지 listView1->Items->Item[4]->Caption="a"; 라고 코딩해주고
listView1->Repaint() 명령으로 listview 를 갱신시키면
자동으로 5번째 row 가 빨강이 되는 것입니다.
콜백함수인가?..그런거랑 비슷한 의미죠.
제가 설명력이 부족해서 -.-...
이번에도 이해가 안되시면 소스를 간단이 만들어서 보여 드릴께요..

초록물고기 님이 쓰신 글 :
: 감사합니다.
: 제가,, 아래와 같은 코드로 테스틀 했는데...
:
: void __fastcall TAddressGroupFrame::ListView1CustomDrawItem(
:       TCustomListView *Sender, TListItem *Item, TCustomDrawState State,
:       bool &DefaultDraw)
: {
:
:         switch ( Item->Index)  //or caption...
:         {
:                 case 0 :
:                         ListView1->Canvas->Brush->Color= clYellow;
:                         break;
:                 case 1:
:                          ListView1->Canvas->Brush->Color= clGreen;
:                         break;
:                 case 2:
:                         ListView1->Canvas->Brush->Color = clRed;
:                         break;
:
:         }
: }
:
: 이건 분명히... 데이타가 삽입되는 당시 ,, onCustomDrawItem 이라는 이벤트가 발생했을때는 ,
: 분명 위와 같은 코드로,, 인테스 값및, 특정 caption 값등으로 색을 지정할 수 있는 것 같습니다.
: 그런데.. 저는 이미 데이타의 삽입은 모두 끝난 상태이고,,,
: 끝난 상태에서...  특정한 버튼이 눌리면... 리스트 뷰의 처음부터 , 끝까지 검색하여.
: ===== 버튼이 클릭 됐을때 ====
:  for (  i = ListView1->Items->Count -1 ; i >= 0 ;i -- )
:   {
:        if ( ListView1->Items->Item[i]->Caption =="a" )
:        {
:            //지금 현재의 row를 색깔 바꾸기... <== 이것을 하려고 하는데..
:             //어떻게 바꿔야 하는지? , CustonDrawItem과는 상황이 틀리지 않은가요?
:             // ==> 색깔이 안바뀌는데... 무엇이 잘못 된건지 ... 모르겠습니다.
:        }
:
:   }
:
: 방태윤 님이 쓰신 글 :
: : 갭션에 따라 색을 바꾸려면 아래와 같은 구문 만 있어도 색갈이 바뀝니다...
: : void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender,
: :       TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
: : {
: :   if(Item->Caption=="a") ListView1->Canvas->Brush->Color=clYellow;
: :   else ListView1->Canvas->Brush->Color=clRed;
: : }
: : ListView1CustomDrawItem 이 위와같다면 갭션이 바뀌면 색도 자동으로 바뀌는데...
: : 안바뀌면 Repaint(); 정도 해주거나요
: : 음..무언가를 혼동하시는거 같기는 한데 ... 어떻게 도와드려야 할지...
: :
: :
: : 초록물고기 님이 쓰신 글 :
: : : 답변 감사함니다... 그런데.. 어떻게 하라는 말씀인지... 잘 이해가 안갑니다.
: : : 일단 저의 상황은...
: : : 하나의 리스트 뷰에... (예를 들면)
: : : caption      colum1    colum2   colum3
: : : ======================================
: : : a            data1     data2    data3
: : : b            dtat1     data2    data3
: : : c            dtata     data2    data3
: : : a            data1     data2    data3
: : : b            dtat1     data2    data3
: : :
: : :
: : : 위와 같이 이미 리스트 뷰에 데이타가 이미 뿌려져 있습니다.
: : : 이렇게 이미 데이타가 뿌려진 상태에서...  사용자자 지정하는 색깔로 row의 전체색을 바꾸려고 합니다.
: : : 예를 들어 cpation 이 "a"  인 row에 대해서는 노랑, 캡션이 "b" 인 rows는 빨강 등입니다.
: : :
: : : CustomDrawItem 이벹트에서 , index 값이나, Caption 값 가지고,
: : : 즉 리스트 뷰에 데이타가 삽입되는 당시에는 , 색깔 지정이 잘 됩니다.
: : : (ListView1->Canvas->Brush->Color= clYellow; )
: : :
: : : 문제는 ... 리스트 뷰에 ..이미 데이타가 뿌려져 있는 상태에서... 특정row에 대한 색깔을 어떻게 바꾸는지가 궁금합니다... 안되는 것 같기도 하고.
: : :
: : : 답변 감사 드림다.
: : : 수고하세요.
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : :
: : : 방태윤 님이 쓰신 글 :
: : : : 오우너 드러우를 사용하시는거지요?
: : : : 어찌됬건간에 색갈에 대한 정보를 어디다 저장해 놓아야 됩니다.
: : : : 제가 하는 방법은 간단한 구조인 경우에는 그냥
: : : : 맨마지막에 서브 아이템을 하나 더 생성해서 거기에 정보를 담아둡니다.
: : : : 화면에는 안나오게 하면 되겟죠?
: : : :
: : : : 복잡한 경우에는 item 에보면 data 라는거 있는데
: : : : 그거랑 외부에 변수 만들어서 연결하면 될거 같고요..
: : : :
: : : : 그리고 오너드러우 부분에서 체크해서
: : : : if (subitems->Strings[5]=="2") ListView1->Canvas->Brush->Color= clYellow;
: : : : else ListView1->Canvas->Brush->Color= clred;
: : : :
: : : : 이런식으로 뿌려주면 되죠..
: : : :
: : : : 그러니까
: : : : :             if ( ListView1->Items->Item[i]->Caption == "원하는 문자열" )
: : : : :            
: : : : 이부분에서 서브아이템의 데이터를 모두 바꾸어주고
: : : : 리플레쉬한다던가 하면 화면에 반영이 되겟죠...?
: : : :
: : : : 암튼 drawitem 부분이 좀 바뀌어야 할거 같네여..
: : : :
: : : :
: : : : 초록물고기 님이 쓰신 글 :
: : : : : 안녕하세요...
: : : : :
: : : : : 리스트 뷰를 사용하다가,,, 간단 할 것 같은데... 막상 해 보니 잘 안되는 것 같아... 글을 올림니다.
: : : : :
: : : : : 현재 리스트 뷰에 데이타가 많이 들어 있습니다.
: : : : : 그리고 그 데이타 들 가운데... 특정 버튼이 눌리면 리스트 뷰에 들어있는 Caption을 비교하여,,,
: : : : : 찾은 조건에 맞는 데이타 이면, 그 row전체를 색깔을 바꾸어 주려고 합니다.
: : : : :
: : : : : void __fastcall TAddressGroupFrame::Button4Click(TObject *Sender)
: : : : : {
: : : : :     for ( i = 0 ; i < ListView1->Items->Count  ; i ++ )
: : : : :     {
: : : : :             if ( ListView1->Items->Item[i]->Caption == "원하는 문자열" )
: : : : :             {
: : : : :                    //검색의 조건에 맞은 모든 row 를 특정한 색깔로 표시한다.
: : : : :                         ListView1->Canvas->Brush->Color= clYellow; ==>?
: : : : :                    //여기서 색깔을 바꿀수 있는 방법을 잘모르겠습니다.
: : : : :                   // 불가능한 것인지요?
: : : : :                   //아니면 여기서... CustomDrawItem 을 호출할 수 있는지요?
: : : : :                   //호출을 하려니까,,, 인자를 어떻게 채워서 호출을 해야 하는지, 좀 어렵습니다.
: : : : :             }
: : : : :     }
: : : : : }
: : : : :
: : : : : 참고로 CustomDrawItem 에서 , index 값이나, Caption 값 가지고,
: : : : : 즉 삽입되는 당시에는 비교 하여, 색깔 지정이 잘 됩니다.
: : : : : switch ( Item->Index)
: : : : : {
: : : : :       case 0 :
: : : : :             ListView1->Canvas->Brush->Color= clYellow;
: : : : :             break;
: : : : : }
: : : : : 고맙습니다.
: : : : : 그럼 수고하세요.
: : : : :

+ -

관련 글 리스트
29511 질문 ] 리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 초록물고기 886 2004/04/26
29517     Re:질문 ] 리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 방태윤 973 2004/04/26
29519         Re:Re:질문 ] 리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 초록물고기 871 2004/04/26
29520             Re:Re:Re:질문 ] 리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 방태윤 1173 2004/04/26
29521                 Re:Re:Re:Re:질문 ] 리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 초록물고기 946 2004/04/26
29532                     Re:리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 방태윤 1150 2004/04/27
29535                         Re:Re:리스트 뷰의 조건에 맞은 데이타들의 row를 원하는 색깔로 바꾸기? 초록물고기 1345 2004/04/27
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.