|
1개만 가지고 테스트 하실때는 문제가 없었나요?
또아리 님이 쓰신 글 :
: 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);
: // }
|