자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
C++ Builder 스트링그리드에서 특정셀의 컬러 변경 문의
2019.03.12 19:21
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
빌더 v10.2 사용 유저입니다.
스트링 그리드 생성해서 특정 셀의 글자 색을 변경하는 것이 최종 목적입니다.
일단 셀에 문자를 읽어서 특정 문자가 있으면 변경해주는 기능인데 하루종일 아무리 시도해보아도 해결이 안되네요
/////////////////////////////////////////////////////////////
추가사항으로 셀에 쓰기전에 Font color를 변경하여 보아도 색이 안변하네요... 이부분만 해결되면
아래 소스구조는 필요없을듯 한데요... 이부분도 문의드립니다.
AlarmGrid->Canvas->Font->Color = clRed;
AlarmGrid->Cells[2][j] = AlarmGrid->Cells[2][j-1];
/////////////////////////////////////////////////////////////
아래 소스코드 참조부탁드립니다.
도움 기다리겠습니다.
감사합니다.
void TAlarmHistoryForm::ReadHistory(void)
{
BYTE TempBuf=0;
//AnsiString strTmp;
//String strTmp;
UnicodeString strTmp;
char i, Step=0;
TRect Rect;
for(int j=1; j<HisPos+1;j++){
AlarmGrid->Cells[0][j] = j;
}
AlarmColorStep2=0;
if(HisPos<HisCount){
for(int j=HisPos+1;j>1;j--){
AlarmGrid->Cells[1][j] = AlarmGrid->Cells[1][j-1]; //시간
strTmp=AlarmGrid->Cells[2][j-1].c_str();
if(strncmp(strTmp,"Occur",5)==0){ //에러 발생
AlarmColorFlag=1;
}
else{
AlarmColorFlag=0;
}
AlarmGrid->Cells[2][j] = AlarmGrid->Cells[2][j-1]; //내용 -> AlarmGridDrawCell 이벤트 발생시 폰트색 결정
//AlarmColorStep2++;
}
}
if( HisPos == HisCount ){
MessageBox(GetDesktopWindow(),_T("LOG DATA READ COMPLETE!") , _T("Message"), MB_OK | MB_SYSTEMMODAL);
}
else{
TempBuf = ++HisTail;
//if(HisTail>99)
// TempBuf = HisTail-100;
if(HisTail>199)
TempBuf = HisTail-200;
AlarmLogDataReq(TempBuf);
d_AlarmRetry =1;
}
}
void __fastcall TAlarmHistoryForm::AlarmGridDrawCell(TObject *Sender, int ACol, int ARow,TRect &Rect, TGridDrawState State)
{
static char i=0;
if(ARow==0) return;
if(ACol==2){
//if(AlarmColorBuffer[AlarmColorStep2]==ALARM_OCCUR){ //0
if(AlarmColorFlag){
AlarmGrid->Canvas->Font->Color = clRed;
AlarmGrid->Canvas->FillRect(Rect);
//AlarmGrid->Canvas->TextRect(Rect,Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
AlarmGrid->Canvas->TextOut(Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
}
else{
AlarmGrid->Canvas->Font->Color = clBlue;
AlarmGrid->Canvas->FillRect(Rect);
//AlarmGrid->Canvas->TextRect(Rect,Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
AlarmGrid->Canvas->TextOut(Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
}
}
}
C++ Builder 스트링그리드에서 특정셀의 컬러 변경 문의
2019.03.12 19:21
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요
빌더 v10.2 사용 유저입니다.
스트링 그리드 생성해서 특정 셀의 글자 색을 변경하는 것이 최종 목적입니다.
일단 셀에 문자를 읽어서 특정 문자가 있으면 변경해주는 기능인데 하루종일 아무리 시도해보아도 해결이 안되네요
/////////////////////////////////////////////////////////////
추가사항으로 셀에 쓰기전에 Font color를 변경하여 보아도 색이 안변하네요... 이부분만 해결되면
아래 소스구조는 필요없을듯 한데요... 이부분도 문의드립니다.
AlarmGrid->Canvas->Font->Color = clRed;
AlarmGrid->Cells[2][j] = AlarmGrid->Cells[2][j-1];
/////////////////////////////////////////////////////////////
아래 소스코드 참조부탁드립니다.
도움 기다리겠습니다.
감사합니다.
void TAlarmHistoryForm::ReadHistory(void)
{
BYTE TempBuf=0;
//AnsiString strTmp;
//String strTmp;
UnicodeString strTmp;
char i, Step=0;
TRect Rect;
for(int j=1; j<HisPos+1;j++){
AlarmGrid->Cells[0][j] = j;
}
AlarmColorStep2=0;
if(HisPos<HisCount){
for(int j=HisPos+1;j>1;j--){
AlarmGrid->Cells[1][j] = AlarmGrid->Cells[1][j-1]; //시간
strTmp=AlarmGrid->Cells[2][j-1].c_str();
if(strncmp(strTmp,"Occur",5)==0){ //에러 발생
AlarmColorFlag=1;
}
else{
AlarmColorFlag=0;
}
AlarmGrid->Cells[2][j] = AlarmGrid->Cells[2][j-1]; //내용 -> AlarmGridDrawCell 이벤트 발생시 폰트색 결정
//AlarmColorStep2++;
}
}
if( HisPos == HisCount ){
MessageBox(GetDesktopWindow(),_T("LOG DATA READ COMPLETE!") , _T("Message"), MB_OK | MB_SYSTEMMODAL);
}
else{
TempBuf = ++HisTail;
//if(HisTail>99)
// TempBuf = HisTail-100;
if(HisTail>199)
TempBuf = HisTail-200;
AlarmLogDataReq(TempBuf);
d_AlarmRetry =1;
}
}
void __fastcall TAlarmHistoryForm::AlarmGridDrawCell(TObject *Sender, int ACol, int ARow,TRect &Rect, TGridDrawState State)
{
static char i=0;
if(ARow==0) return;
if(ACol==2){
//if(AlarmColorBuffer[AlarmColorStep2]==ALARM_OCCUR){ //0
if(AlarmColorFlag){
AlarmGrid->Canvas->Font->Color = clRed;
AlarmGrid->Canvas->FillRect(Rect);
//AlarmGrid->Canvas->TextRect(Rect,Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
AlarmGrid->Canvas->TextOut(Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
}
else{
AlarmGrid->Canvas->Font->Color = clBlue;
AlarmGrid->Canvas->FillRect(Rect);
//AlarmGrid->Canvas->TextRect(Rect,Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
AlarmGrid->Canvas->TextOut(Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
}
}
}
AlarmGrid->Canvas->Font->Color = clRed;
AlarmGrid->Canvas->Brush->Color = $00E6FE9C {배경색상} ------------------------------>> 이 부분이 필요합니다.
AlarmGrid->Canvas->FillRect(Rect);
//AlarmGrid->Canvas->TextRect(Rect,Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);
AlarmGrid->Canvas->TextOut(Rect.Left,Rect.Top,AlarmGrid->Cells[2][ARow-1]);