|
아마도 메시지(event)의 처리 순서 때문에 잘못된 것 같네요.
ReadMsg에서 tmp_level을 바꾸면
ListBox1DrawItem에서 현재의 tmp_level을 보고
전체 메시지를 그 색으로 칠할 것 같네요.
ListBox의 각 아이템 값(AnsiString)을 보고 판단해서 색을 지정하게 코딩을 하지 않으면
tmp_level의 값과 ListBox에 들어가는 값을 매치시키는 별도의 자료를 사용해야될 것 같네요.
예를 들면, STL(standard template library)의 map과 같은 자료구조를
사용하면 될 것 같네요.
김상훈 님이 쓰신 글 :
: 리스트 박스에서 각 아이템의 덱스트 색깔이 각 조건에 의해서 바꾸어지도록 코딩을 햇는데..각 라인이 바뀌는 것이 아니라..전체가 다 바뀌어 집니다..어디가 잘 못 되었는지 선배님들의 많은 가르침을 기다리겠습니다...그럼 즐거운 주말이 돼세요...
:
: bool __fastcall TMsgForm::ReadMsg( void )
: {
: ....
: ....
: ....
: tmp_level=....;
: ...
: }
:
: void __fastcall TMsgForm::ListBox1DrawItem(TWinControl *Control, int Index,
: TRect &Rect, TOwnerDrawState State)
: {
: if( tmp_level == MSG_LVL_LOW){
: ListBox1->Canvas->Font->Color= clWhite;}
: else if( tmp_level == MSG_LVL_MED){
: ListBox1->Canvas->Font->Color = clAqua;}
: else if( tmp_level == MSG_LVL_HIGH){
: ListBox1->Canvas->Font->Color = clYellow;}
: else if( tmp_level == MSG_LVL_ERROR){
: ListBox1->Canvas->Font->Color = clFuchsia;}
: else if( tmp_level == MSG_LVL_FATAL){
: ListBox1->Canvas->Font->Color = clRed;}
:
: ListBox1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, ListBox1->Items->Strings[Index]);
:
: }
|