В DevExpress 'Quantum Grids, как я могу ограничить область щелчка ячейки с флажком фактическим флажком, а не всей ячейкой - PullRequest
1 голос
/ 24 сентября 2010

Я использую Delphi (2010) и DevExpress Quantum Grid (v. 6.52)

Когда у меня есть TcxGridColumn с редактором CheckBox, флажок переключается, когда пользователь щелкает в любом месте ячейки.Я хочу ограничить это так, что пользователь должен нажать на фактический флажок.

Есть ли простой способ сделать это?У нас огромное количество сеток в нашем приложении, многие с редакторами флажков, так что я надеюсь, что "волшебная" маленькая хитрость сделает это для меня.Я бы не хотел писать собственный код для каждой сетки в нашем приложении: - /

Ответы [ 3 ]

1 голос
/ 25 сентября 2010

Если вы (или ваши клиенты) хотите, чтобы этот флажок не изменялся сразу, если вы щелкнете по ячейке, то может помочь, если вы установите для свойства ImmediatePost значение false.

0 голосов
/ 27 сентября 2010

Я отправил тот же вопрос, что и запрос в службу поддержки 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 было в сетке, а не в столбце, я не могу создать элемент репозитория для своих флажков-столбцов, но, по крайней мере, теперь я знаю, как это сделать.

0 голосов
/ 25 сентября 2010

Возможно, не точный ответ, который вы ищете, но, возможно, он удовлетворит запрос ваших клиентов.

Для каждой ячейки в вашей cxGrid вы можете включить или выключить свойство ImmediateEditor. Это свойство определяет, активируется ли конкретный редактор столбцов сразу после нажатия на соответствующую ячейку.

Из файла справки для cxGrid версии 6:

свойство ImmediateEditor: Boolean;

Описание

Используйте свойство ImmediateEditor, чтобы определить, активирован ли конкретный редактор столбцов, когда пользователь щелкает соответствующую ячейку. Если это свойство имеет значение False, то редактор ячеек сетки активируется нажатием клавиши Enter, когда фокус находится в определенной ячейке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...