|
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개입니다.
:
: 마지막 세번째 질문은요,
: 리스트뷰의 내용은 저의 경우는
: 상당히 많거든요. 그래서 아이템이
: 계속해서 늘어나기 때문에
: 스크롤로 올리거나 내리는 데에도
: 한계가 있습니다.
: 그래서 아이템(라인)이 특정수치이상이 되면
: 오래된 아이템(라인)부터 지웠으면 합니다.
: 문제가 까다로운가요? 저에게는 그렇습니다.
: 어느 부분이라도 알고 계시면 도와주시면
: 감사하겠습니다.
: 그럼...
|