//StringGrid 셀단위 커스텀 그리기
//체크박스를 그려주기 위한 이벤트이다.
void __fastcall TInputDiagForm::StringGridDrawCell(TObject *Sender,
int ACol, int ARow, TRect &Rect, TGridDrawState State)
{
//0번째 줄은 헤더다. 그려줄 필요 없음
if (ARow == 0)
return;
//컬럼이 0, 1이 아니면 체크박스 그려줄 필요 없음
if (!(ACol == 0 || ACol == 1))
return;
TStringGrid* grid = dynamic_cast<TStringGrid*> (Sender);
TRect aRect = Rect;
TRect tRect;
//체크박스의 체크여부 데이터를 가지고 있는 컬럼 인덱스
int referCol = 5;
unsigned int BoxState;
BoxState = DFCS_BUTTONCHECK;
if (ACol == 1) //1번일때는 6번이 가지고 있다.
referCol = 6;
if (StringGrid->Cells[referCol][ARow] == "Y")
BoxState |= DFCS_CHECKED;
tRect.left = aRect.left + (aRect.right - aRect.left - GetSystemMetrics(SM_CXMENUCHECK)) / 2;
tRect.top = aRect.top + (aRect.bottom - aRect.top - GetSystemMetrics(SM_CYMENUCHECK)) / 2;
tRect.right = tRect.left + GetSystemMetrics(SM_CXMENUCHECK);
tRect.bottom = tRect.top + GetSystemMetrics(SM_CYMENUCHECK);
DrawFrameControl(grid->Canvas->Handle, &tRect, DFC_BUTTON, BoxState);
}
//휠 이동시 체크박스 체크되는 버그 막기
void __fastcall TInputDiagForm::StringGridMouseWheelDown(TObject *Sender,
TShiftState Shift, TPoint &MousePos, bool &Handled)
{
Handled = true;
StringGrid->Perform(WM_VSCROLL, SB_LINEDOWN, 0);
}
//---------------------------------------------------------------------------
void __fastcall TInputDiagForm::StringGridMouseWheelUp(TObject *Sender,
TShiftState Shift, TPoint &MousePos, bool &Handled)
{
Handled = true;
StringGrid->Perform(WM_VSCROLL, SB_LINEUP, 0);
}