C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
OnMouseDown не срабатывает на Grid-е?
cirius
Отправлено: 08.07.2004, 17:48


Ученик-кочегар

Группа: Участник
Сообщений: 6



Событие срабатывает только если нажать вне сетки (чуть ниже последней строки или на шапке например). Нажатие внутри сетки не фиксируется. В чем может быть проблемма?
Gedeon
Отправлено: 08.07.2004, 18:41


Ветеран

Группа: Модератор
Сообщений: 1742



У меня срабатывает, показывайте код, где-то значит че-то переопределено, кстати какой грид?
cirius
Отправлено: 09.07.2004, 13:24


Ученик-кочегар

Группа: Участник
Сообщений: 6



Просто делаю новый проект, кидаю на форму стандартный DBGrid и на событие OnMouseDown пишу ShowMessage(....).
На всех остальных гридах нормально работает.
Gedeon
Отправлено: 09.07.2004, 14:03


Ветеран

Группа: Модератор
Сообщений: 1742



Судя по всему там этот ивент и не должен происходить, для этого есть специальный
CODE

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)
{
   ShowMessage("Down");
}
//---------------------------------------------------------------------------
cirius
Отправлено: 09.07.2004, 15:23


Ученик-кочегар

Группа: Участник
Сообщений: 6



Дело в том, что я сделал компонент, наследник DBGird и переписал у него методы как тут посоветовали:

class PACKAGE TtestDBGrid : public TDBGrid
{ typedef TDBGrid inherited;

private:
TDrawColumnCellEvent FOnDrawColumnCell;
void __fastcall SubOnDrawColumnCell (TObject* Sender, TRect &Rect, int DataCol, TColumn* Column, TGridDrawState State);

__published:
__fastcall TtestDBGrid(TComponent* Owner);
__property TDrawColumnCellEvent OnDrawColumnCell = {read = FOnDrawColumnCell, write = FOnDrawColumnCell };
};

//-------------------------------------------------------------------
__fastcall TtestDBGrid::TtestDBGrid(TComponent* Owner) : TDBGrid(Owner)
{
inherited::OnDrawColumnCell = TDrawColumnCellEvent(&SubOnDrawColumnCell);
}

void __fastcall TtestDBGrid::SubOnDrawColumnCell (TObject* Sender,
TRect &Rect, int DataCol, TColumn* Column, TGridDrawState State)
{
// делаем свои черные дела
if (OnDrawColumnCell) OnDrawColumnCell (Sender, Rect, DataCol, Column, State);
// делаем свои черные дела
}

Так вот, если такимже способом переписать метод CellClick,то при вызове родного метода [предпоследняя строка кода — OnDrawColumnCell (Sender, Rect, DataCol, Column, State)] он не дает добавить к вызову Sender и соответсвенно работает как попало и никак не определиш на какой столбец ты попал.
Кроме этого мне еще очень желательно знать координаты мышки в момент щелчка в ячейке.

Отредактировано cirius — 09/07/2004, 16:30

Вернуться в Вопросы программирования в C++Builder