2010-09-24 1 views
1

Я использую Delphi (2010) и DevExpress Quantum Grid-(ст. 6,52)В DevExpress' Quantum сетках, как ограничить область щелчка ячейки с флажком фактического флажка, а не все мобильного

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

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

+1

Почему, зачем вы хотите это сделать? Почему вы хотите, чтобы ваше приложение было труднее использовать? Многие пользователи не так хорошо разбираются в использовании мыши, как большинство программистов. Как вы думаете, почему MS создала строку заголовка и кнопку закрытия «x» для всех окон больше, чем до Win2K? –

+0

Я хочу сделать это, потому что это _direct request_ от наших клиентов. Они считают, что слишком легко непреднамеренно переключать флажки так, как сейчас. Иногда они нажимают на ячейку, чтобы сосредоточиться на определенной строке, и даже не замечают, что они ее изменили! Почему флажок работать по-разному, когда он находится в сетке, чем когда он находится в форме?Поэтому в заключение я полностью не согласен с вами :-) –

ответ

0

я послал тот же вопрос, как запрос поддержки в DevExpress, и я получил этот ответ:.

«Здравствуйте Svein

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

+1

Это было определенно лучшее место, чтобы спросить. Поддержка от * DevExpress * выше! – splash

1

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

+0

Нет, это не имеет никакого значения. Флажок по-прежнему переключается, и как только пользователь покидает ячейку, значение публикуется. –

0

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

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

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

собственности ImmediateEditor: Boolean;

Описание

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

+0

Это затрудняет непреднамеренное переключение флажков, и это решит проблему для людей, которые нажимают на строку, чтобы установить фокус, но это изменит поведение всей сетки, а не только флажки. –

+0

Но это держит обработку согласованной! Вы пытаетесь ввести специальную ячейку/редактор, который ведет себя по-другому. Может быть, пришло время для обучения клиентов !? ;-) – splash

+0

Я бы с удовольствием, но у нас очень мало клиентов, и мы не можем рисковать их отчуждать :-) –

Смежные вопросы