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
[43873] Re:Re:Re: 정말 감사합니다...그런데 질문 하나만 더요.....
박지훈.임프 [cbuilder] 990 읽음    2006-02-28 23:01
첫 질문과 이번 질문이 내용이 다른 건가요?
첫 질문은 리스트뷰의 데이터를 찾는 게 아니라 아이템들을 어떻게 구별하는가에 대한 거였던 거 같은데요.

FindData()의 헬프를 보시면, TListItem의 Data 속성을 찾는다고 되어 있습니다.
서브아이템으로 찾는 함수가 아닙니다. 함수로 넘겨지는 두번째 인자와 Data 속성이 같은 걸 찾는 거죠.

그리고 혹시나 제가 했던 답변의 의도를 잘못 이해하신 것이 아닌가 싶어서 노파심에 말씀드리는 건데...
제가 드렸던 답변의 뜻은, 첫 질문이 경우1로 추가된 아이템과, 경우2로 추가된 아이템을, OnCustomDrawItem의
핸들러에서 다른 색깔로 그리려면, 두 경우를 구별할 수 있는 방법이 있어야 되지 않겠느냐고 말씀드린 겁니다.

그래서, Data 같은 경우 개발자가 마음대로 쓸 수 있는 속성이므로, 이걸 이용하는 게 어떠냐고 제안을 드린 거구요.
경우1에서 아이템을 추가하는 코드에서 Data에 0을 집어넣고(캐스팅해야겠죠) 경우2에서 아이템을 추가하는 코드에서는
Data에 1을 집어넣으면(역시 캐스팅해야겠죠) OnCustomDrawItem에서 그릴 때 아이템의 Data 속성이 0인지 1인지
구별해서 색깔을 줄 수 있을 거란 말씀을 드린 겁니다.

void __fastcall TForm7::Button1Click(TObject *Sender)
{
    TListItem *lItem = ListView1->Items->Add();
    lItem->Caption = "aaaaa";
    lItem->SubItems->Add("bbbbb");
    lItem->SubItems->Add("cccccc");
    lItem->Data = (void *)1;
}
//---------------------------------------------------------------------------
void __fastcall TForm7::Button2Click(TObject *Sender)
{
    TListItem *lItem = ListView1->Items->Add();
    lItem->Caption = "aaaaa";
    lItem->SubItems->Add("bbbbb");
    lItem->SubItems->Add("cccccc");
    lItem->Data = (void *)0;
}
//---------------------------------------------------------------------------
void __fastcall TForm7::ListView1CustomDrawItem(TCustomListView *Sender,
      TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{
    if (Item->Data==(void *)(1))
        Sender->Canvas->Font->Color = clBlue;
    else
        Sender->Canvas->Font->Color = clRed;
}
//---------------------------------------------------------------------------

물론 만약 SubItems로 구별이 가능하다면 그걸로 체크하면 되겠죠.
그러면 바로 위의 if문은 이렇게 바뀌어야 겠네요.
if (Item->SubItems->Strings[0]=="문자열1")

그럼...


김도훈 님이 쓰신 글 :
: 리스트 뷰의 데이타를 찾을때 캡션으로 찾으면 제대로 찾아 지는데 서브아이템으로 찾으면 찾지는 못 하네요..
: char str[128];
: //str 초기화
: pItem=MainForm->lvTestResult->FindData(0,str,false,true);
:
: 틀린 것이 잇나요?
: 캡션은 숫가 들어가 있어서 찾지를 못하고 서브 아이템으로 찾아야 하는데 머가 틀린 걸까요?
: 데이타는
:
: 정수1 | 문자열 1 |실수 | 문자열 2| 정수2
:
: 이런식으로 들어 가는데 제가 찾으려고 하는 것은 문자열 1 입니다...
: 아무리 해도 pItem에 NULL 값이 넘어 오면서 에러가 나네요...답변 부탁드립니다...
:
: 수고 하세요
:
:
: 박지훈.임프 님이 쓰신 글 :
: : 역시 아이템->SubItems->Add() 하시면 됩니다.
: : SubItems가 TStrings 타입이기 때문에 Add()로 계속 추가할 수 있습니다.
: : (아이템을 구하는 방법은 원하시는 상황에 따라 다르겠죠?)
: :
: : 그리고 경우에 따라 색깔이 다르게 나오게 하려면...
: : OnCustomDrawItem 이벤트 핸들러에서 단지 Sender.Canvas.Font.Color만 바꿔주면 됩니다.
: : 경우를 구별하려면, 아이템 자체에 뭔가 구별할 수 있는 데이터가 들어있어야 할 텐데, Caption이나 SubItems 등등
: : 아이템 자체에 있는 데이터로 구분이 안되고 별도의 기준이 있어야 한다면 포인터인 Data 속성에다 뭔가 데이터를 넣어
: : 구별할 수 있겠죠.
: :
: : 그럼...
: :
: : 김도훈 님이 쓰신 글 :
: : : 리스트 뷰를 그리드 형태로 만들어서 테이타를 넣는데
: : : void Myfunc()
: : : {
: : :                 lItem=MainForm->lvTestResult->Items->Add();
: : :                 lItem->Caption="aaaaa";
: : :                 lItem->SubItems->Add("bbbbb");
: : :                 lItem->SubItems->Add("cccccc");
: : : }
: : : void main()
: : : {
: : :     Myfunc();
: : : }
: : :
: : : 이런식으로 되어 있을때 메인에서 cccccc 다음 cols 에 데이타를  넣을려면 어떻게 해야 하나요?
: : : 그리고 메인에서 써지는 글씩 들은 색깔을 바꾸고 싶은데....
: : : Myfunc 에서 써진 글자와 main 에서 쓴 글씨의 색깔이 다르게 보이게 하는 방법도 알려 주시면 감사 하겠습니다...

+ -

관련 글 리스트
43848 리스트 뷰에 아이템 추가 하기 김도훈 1461 2006/02/27
43862     Re:리스트 뷰에 아이템 추가 하기 박지훈.임프 1090 2006/02/28
43872         Re:Re: 정말 감사합니다...그런데 질문 하나만 더요..... 김도훈 899 2006/02/28
43873             Re:Re:Re: 정말 감사합니다...그런데 질문 하나만 더요..... 박지훈.임프 990 2006/02/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.