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
[18581] Re:이 문제 좀 해결해 주세요.
유영인 [Chris] [cuperido] 879 읽음    2002-05-16 15:28
1. 값을 판단해서 그 라인을 바꾸는 방법
이벤트 중에는 OnCustomDrawItem 이라는 이벤트가 있습니다. 이 이벤트는 아이템을 그릴때 발생하는 이벤트로서, 이 때 값을 비교하시고 색을 바꿔주시면 됩니다.

2. 최신의 정보가 맨 위에 오도록 하는 방법
Add 메소드 대신 Insert 메소드를 사용하시면 간단하게 해결됩니다. Add는 맨 뒤에 추가하는 반면, Insert 메소드는 원하는 셀에 끼워 넣을 수 있습니다.

3. 오래된 아이템 지우는 방법
Delete 메소드도 Insert 와 마찬가지로, 원하는 셀의 아이템을 지정하여 지울 수 있습니다. 만약 원하시는 갯수가 넘으면, 그 아래 있는것들을 지정해서 지워주시면 되겠지요.


간단한 예제입니다. Timer 는 서버에서 데이터를 받아올 때 실행하는 이벤트를 가상으로 대체한 것입니다.


//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

TListItem         *liItem;
int               itCount;


// 이 루틴은 맨 위부터 추가를 시켜주는 루틴입니다.
liItem = ListView1->Items->Insert(0);
liItem->Caption = Time();

for(itCount = 0; itCount < ListView1->Columns->Count - 1; itCount ++)
   liItem->SubItems->Add(random(3) + 1);



// 이 루틴은 객체가 10 개가 넘지 않도록 조절하는 루틴입니다
while(ListView1->Items->Count > 10)
   ListView1->Items->Delete(10);

}

//---------------------------------------------------------------------------

void __fastcall TForm1::ListView1CustomDrawItem(TCustomListView *Sender, TListItem *Item, TCustomDrawState State, bool &DefaultDraw)
{

// 만약 6번 컬럼이 1 이면, 라인을 녹색으로 바꾸는 루틴
// String[4] 는, 서브아이템 중에 4번 이므로...
// 본래 부모(1) + 서브 (0..1..2..3..4) 므로, 6번째 컬럼이 됩니다.
if(Item->SubItems->Strings[4].Trim() == "1") {
   ListView1->Canvas->Font->Color = clGreen;
   DefaultDraw = true;
  } else {
   DefaultDraw = true;
}

}
//---------------------------------------------------------------------------


답답이 님이 쓰신 글 :
:
:  리스트뷰를 사용해서
:  작업을 하고 있습니다.
:  많은 것들은 여기서 질문과 답변 혹은
:  다른 분들이 써 주신 글들을 보고
:  대부분 해결했습니다.
:  근데 잘 안되는 부분이 있어
:  다시 질문드립니다.
:  질문은 세가지인데요,
:  하나는 리스트뷰에서 특정 칼럼의
:  값을 판단해서 그 한 라인 전체의
:  색을 바꾸는 거구요, (참고로 저는 6개의
:  칼럼으로 리스트뷰가 구성되어 있구요,
:  아이템은 서버의 내용을 받아서 뿌려주는
:  거라 계속 늘어납니다.)
:
:  두번째 질문은요,
:  리스트뷰에 값들을 넣을때
:  제일 아래에서 부터 입력하는 방법이 뭔가요?
:  스크롤을 제일 아래로 맞추는 방법은
:  여기서 봤는데
:  이건 없더라구요, 그러니까 최신의 정보가
:  가장 윗줄에 오도록 해야 합니다.위에서
:  말했듯이 칼럼은 6개입니다.
:
:  마지막 세번째 질문은요,
:  리스트뷰의 내용은 저의 경우는
:  상당히 많거든요. 그래서 아이템이
:  계속해서 늘어나기 때문에
:  스크롤로 올리거나 내리는 데에도
:  한계가 있습니다.
:  그래서 아이템(라인)이 특정수치이상이 되면
:  오래된 아이템(라인)부터 지웠으면 합니다.
:  문제가 까다로운가요? 저에게는 그렇습니다.
:  어느 부분이라도 알고 계시면 도와주시면
:  감사하겠습니다.
:  그럼...

+ -

관련 글 리스트
18571 이 문제 좀 해결해 주세요. 답답이 731 2002/05/16
18581     Re:이 문제 좀 해결해 주세요. 유영인 [Chris] 879 2002/05/16
18595         Re:Re:이 문제 좀 해결해 주세요. 답답이 699 2002/05/17
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.