class PACKAGE TGame : public TCustomDrawGrid{ typedef TCustomDrawGrid Inherited; private: TWndMethod OldGridProc; public: __fastcall TGame(TComponent* AOwner) : Inherited(AOwner), OldGridProc(0) { SetSize(4, 4); // установить размер поля по умолч. 4х4 OldGridProc = WindowProc; // сохранить оконную процедуру WindowProc = &GridProc; // подменить оконную процедуру } virtual __fastcall ~TGame() { } // установка размера поля void __fastcall SetSize(unsigned int AColCount, unsigned int ARowCount) { RowCount = ARowCount; ColCount = AColCount; // и т.д. } // открытые методы от TCustomDrawGrid... protected: virtual void __fastcall GridProc(TMessage& msg) { if(msg.Msg==WM_LBUTTONDOWN) { FLBDown = true; // вычислить координаты мыши и клетки грида } else if(msg.Msg==WM_LBUTTONUP) { FLBDown = false; // вычислить координаты мыши и клетки грида // проверка правильности хода и сам ход: if (ValidateMove()) CommitMove(); } else if(msg.Msg==WM_MOUSEMOVE && msg.WParam==MK_LBUTTON) { // если курсор движется + зажаьа ЛК, вычислить координаты мыши: const int x = GET_X_LPARAM(msg.LParam); const int y = GET_Y_LPARAM(msg.LParam); // вычислить координаты покрытых клеток } OldGridProc(msg); // обработать другие сообщение в очереди } // защищенные методы от TCustomDrawGrid...};