|
Form안에 4개의 TValueListEditor를 놓고...각 TValueListEditor로 부터 OnDrawEvent를 호출하여...ValueListEditro를 다시 그리는데요...이상하게 그려집니다. 그려지지도 않을뿐더러...에러 메세지를 뿜어내는군요..(Index out of 8) 인덱스값이 오류라는데..데이터는 정상적으로 들어오고 있구요...인덱스값이 틀린게 아닌데..동시에 4개를 그려서 그런지 잘 안그려지더군요...그래서 OnDrawCell Event를 막아봤더니 정상동작되더라구요....이유가 무엇인지요? OnDrawCell Event를 동시에 여러개를 빠르게 그릴때 문제가 발생할 수 있는건가요?
//------------------- 아래 DrawCell을 동시에 4개부르는데요...
// ValueListEditor Draw Cell Event -- for INVERTER2
void __fastcall TForm1::INV2_DataListDrawCell(TObject *Sender, int ACol,
int ARow, TRect &Rect, TGridDrawState State)
{
// TBitmap 포인터 생성 그래픽 객체 저장
// Graphics::TBitmap *BM_Buff = new Graphics::TBitmap();
// TValueListEditor *pGrid = dynamic_cast<TValueListEditor *>(Sender); // 현재 Sender로 들어오는 Object
// // Position을 위한 X, Y 그리고 Rect Area Text높이를 결정하기 위해서 여기에 변수 설정
// int CenterX = 0;
// int CenterY = 0;
// TRect Area;
// int TextHeight;
//
// // 기본 텍스트 Align은 Center로 잡는다.
// // ValueListEditor의 기본 상속은 StringGrid로 부터 받아오기 때문에 특정라인 또는
// // 전체 셀에 대한 정보를 OnDrawCell에서 다시 그린다.
// unsigned oldalign = SetTextAlign(pGrid->Canvas->Handle, TA_CENTER);
//
// // 만약에 State가 선택된상태 (셀이 선택된 상태라면 )
// if(ARow !=0) {
//
// if( State.Contains(gdSelected) )
// {
// // Draw Canvas ( 바탕을 화이트로 바꾸고 FontColor = clRed로 바꾼다.)
// pGrid->Canvas->Brush->Color = clWhite;
// pGrid->Canvas->Pen->Color = clWhite;
// pGrid->Canvas->Font->Color = clRed;
// pGrid->Canvas->Font->Style = TFontStyles();
// }else {
// // Draw Canvas ( 바탕을 화이트로 바꾸고 FontColor = clBlack로 바꾼다.)
// // 선택되지 않았을 때 ACol > 0 크면, 즉 타이틀 바가 아니면
// pGrid->Canvas->Brush->Color = clWhite;
// pGrid->Canvas->Pen->Color = clWhite;
// pGrid->Canvas->Font->Color = clBlack;
// pGrid->Canvas->Font->Style = TFontStyles();
//
// }
// }
//
// // 여기서 Text크기를 결정하고 해당 위치에 매칭 시킨다.
// TextHeight = pGrid->Canvas->TextHeight(INV1_DataList->Cells[ACol][ARow]);
// pGrid->Canvas->TextRect( Rect
// , (Rect.left + Rect.right)/2
// , Rect.top + (Rect.Height()/2 - TextHeight/2)
// , pGrid->Cells[ACol][ARow]);
//
// SetTextAlign(pGrid->Canvas->Handle, oldalign);
//
//
// // 이 이하의 Acol에 대하여 switch문으로 처리할 것.
// // 만약에 컬럼이 1보다 작거나 같고 로우가 0이라면 ( 즉 타이틀 바를 뜻함.)
// if ((ACol<=1) && (ARow == 0))
// {
// // 타이틀바의 맨처음 컬럼에 대한 이미지 리스트에 대해서 ImageList로 부터 Image를 가져온다.
// if ((ACol == 0) && (ARow == 0))
// {
// ImageList1->GetBitmap(0, BM_Buff);
// }else {
// ImageList1->GetBitmap(1, BM_Buff);
// }
//
// CenterX = Rect.Left;
// CenterY = Rect.Top;
// // 여기서 이미지 리스트로 부터 가져온 버퍼이미지를 여기에 매칭 시킨다.
// pGrid->Canvas->Draw(CenterX, CenterY, BM_Buff);
// }
|