Я отправил тот же вопрос, что и запрос в службу поддержки DevExpress, и получил ответ:
"Привет Свейн.
Спасибо за вашесообщение. Вы можете достичь желаемого результата, используя обработчик события OnMouseDown GridView и проверяя там информацию о попадании. В приложении приведен пример, показывающий, как выполнить эту задачу. Пожалуйста, попробуйте это решение и сообщите нам свои результаты. "
Тестовый проект имел простую сетку со столбцом флажка.Событие OnMouseUp GridView имело следующий код:
procedure TForm1.cxGrid1TableView1MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
AHitTest: TcxCustomGridHitTest;
ACellViewInfo: TcxGridDataCellViewInfo;
AEditViewInfo: TcxCustomCheckBoxViewInfo;
ARect: Trect;
AValue: Variant;
begin
AHitTest := TcxGridSite(Sender).GridView.GetHitTest(X, Y);
if AHitTest is TcxGridRecordCellHitTest then
begin
ACellViewInfo := TcxGridRecordCellHitTest(AHitTest).ViewInfo as TcxGridDataCellViewInfo;
if ACellViewInfo.EditViewInfo is TcxCustomCheckBoxViewInfo then
begin
AEditViewInfo := TcxCustomCheckBoxViewInfo(ACellViewInfo.EditViewInfo);
ARect := AEditViewInfo.CheckBoxRect;
if PtInRect(ARect, Point(X, Y)) then
begin
AValue := ACellViewInfo.GridRecord.Values[ACellViewInfo.Item.Index];
TcxGridTableView(TcxGridSite(Sender).GridView).DataController.SetEditValue(
ACellViewInfo.Item.Index, AValue = false, evsValue);
end;
end;
end;
end;
К сожалению, поскольку событие MouseUp было в сетке, а не в столбце, я не могу создать элемент репозитория для своих флажков-столбцов, но, по крайней мере, теперь я знаю, как это сделать.