|
전역 변수를 사용하기 보다는 바로 L, M, H, E, F 값으로 처리를 하세요.
특히나 전역변수를 별도의 함수에서 변경하는 것은 처리 방법에 문제가 있어보입니다.
DrawItem내에서 전역변수 값을 리스트 박스의 아이템에 따라 변경해 줄 수 있어야
합니다.
아니면 전역변수를 사용하지 않고, 직접 메시지 레벨에 따른 처리를 해주야야하겠죠.
switch( level ) {
case 'L':
ListBox1->Canvas->Font->Color= clWhite;
break;
}
ListBox1->Canvas->TextRect(Rect, Rect.Left, Rect.Top, ListBox1->Items->Strings[Index]);
이 경우에 STL을 사용할 필요가 없네요.
리스트 박스의 아이템을 구성하는 string값에 메시지 레벨이 들어간다면 그 레벨값에 따라서
처리를 해주시고, 혹시라도 없다면, ListBox1->Items->AddObject와
ListBox1->Items->Objects[i]를 이용해보세요.
김상훈 님이 쓰신 글 :
: 리스트 박스의 아이템에서 메세지 레벨이라는 값도 들어가집니다.이 메세지 레벨값을 보고 그 메세지 레벨에 해당하는 색을 설정하고 싶거든요..메세지 레벨의 값은 각 5개로 "L","M","H","E","F"로 다섯가지 입니다.그래서 전 아이템에서 이다섯개를 순서대로 0~4로 지정하여 그 해당값을 전역변수 tmp_level에 할당하고, 이를 ListBox1DrawItem함수에서 조건문에 사용하였습니다..근데 한 라인의 아이템의 색이 변하는것이아니라..전체가가 다 변해서...이 글을 올리게 되엇습니다..좀더 상세히 답변해 주시면 감사 하겠습니다.
:
: 그리고 아직 초보라서...답변의 내용을 전혀 모르겠씁니다..죄송하지만 STL이 뭔지..좀더 자세히 설명해 주시고, 이왕이면 이와 유사한 예제를 하나 들어 주시면 감사 하겟습니다...한 주의 시작인 월요일 즐거운 하루 되세요..감사
:
: 박세용 님이 쓰신 글 :
: : 아마도 메시지(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]);
: : :
: : : }
|