|
안녕하세요.. StringGride의 특정 셀의 색상을 바꾸려고 하는데..
여기 게시판의 내용을 검색해서 만들기는 만들었는데..
유독, 현재 Focus가 가 있는 셀은 글자가 나오지 않습니다.
그러다가, 그리드의 아무 셀이나 마우스로 선택하면 내용이 표시됩니다.
아래의 코드를 보시고 어디가 잘못되었는 지 지적 바랍니다..
아래의 코드는 6번째 컬럼 이전의 컬럼은 무조건 흰색 바탕에 검은 색 글자,
6번째 컬럼은 컬럼의 상황에 따라 색상 지정,
6번째 이상 컬럼도 상황에 따라 색상을 지정하고, 글자 색은 모두 검정색입니다.
Focus가 가 있는 Cell은 색상 지정만 되고 글자가 표시되지 않는데..
포커스가 다른 곳으로 도망가면 다시 글자는 나타나는데..어찌된 영문 인 지..
고수님들의 의견 바랍니다...
감사합니다.
void __fastcall TTestForm::StringGrid_TestDrawCell(TObject *Sender,
int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
TStringGrid *pGrid = dynamic_cast<TStringGrid *>(Sender);
AnsiString sData = pGrid->Cells[ACol][ARow];
#ifdef _DEBUG
AnsiString aa= "Cell[" + IntToStr(ACol) + "][" + IntToStr(ARow) + "]";
if ( State.Contains(gdFixed )) aa += "State = gdFixed";
else if ( State.Contains(gdSelected)) aa += "State = gdSelected";
else if ( State.Contains(gdFocused)) aa += "State = gdFocused";
else aa += "None";
aa += "[DATA] = " + sData;
OutputDebugString(aa.c_str());
#endif
if ( State.Contains(gdFixed)) {
// nothing to do..=> fixed row
} else {
if ( ACol < 6 ) {
pGrid->Canvas->Brush->Color = clWhite;
pGrid->Canvas->FillRect(Rect);
} else if ( ACol == 6 ) {
int iDecision ;
iDecision = xGetDecisionFromStr(sData);
switch ( iDecision ) {
case EXAM_BEFORE:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorBefore;
break;
case EXAM_PASSED:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorPass;
break;
case EXAM_NOTPASSWD:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorNotPass;
break;
case EXAM_FAIL:
pGrid->Canvas->Brush->Color = (TColor) m_iSetup_ColorFail;
break;
case EXAM_FORCEFAIL:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorForceFail;
break;
case EXAM_WRONGTEST:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorWrongTest;
break;
case EXAM_NOTATTEND:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorAbsent;
break;
case EXAM_ETC:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorBefore;
break;
case EXAM_TEST:
pGrid->Canvas->Brush->Color = (TColor)m_iSetup_ColorTesting;
break;
default :
break;
}
pGrid->Canvas->FillRect(Rect);
} else if ( ACol > 6 ) {
if ( sData == "" ) {
pGrid->Canvas->Brush->Color = clWhite;
} else if ( StrToInt(sData) < 0 ) {
pGrid->Canvas->Brush->Color = clRed;
} else {
pGrid->Canvas->Brush->Color = clLime;
}
pGrid->Canvas->FillRect(Rect);
} else {
pGrid->Canvas->Brush->Color = clWhite;
pGrid->Canvas->FillRect(Rect);
}
}
// Cell Text Print
unsigned oldalign = SetTextAlign(pGrid->Canvas->Handle, TA_CENTER);
pGrid->Canvas->TextRect(Rect, (Rect.Right+Rect.Left)/2, Rect.Top+3, sData);
SetTextAlign(pGrid->Canvas->Handle, oldalign);
}
|