Delphi 在DevExpress';Quantum Grids,如何将带有复选框的单元格的单击区域限制为实际的复选框,而不是整个单元格
我使用Delphi(2010)和DevXPress量子网格(6.52节) 当我有一个带有复选框编辑器的TcxGridColumn时,当用户单击单元格中的任意位置时,复选框将切换。我想限制这一点,以便用户必须单击实际复选框Delphi 在DevExpress';Quantum Grids,如何将带有复选框的单元格的单击区域限制为实际的复选框,而不是整个单元格,delphi,devexpress,Delphi,Devexpress,我使用Delphi(2010)和DevXPress量子网格(6.52节) 当我有一个带有复选框编辑器的TcxGridColumn时,当用户单击单元格中的任意位置时,复选框将切换。我想限制这一点,以便用户必须单击实际复选框 有没有一个简单的方法可以做到这一点?我们的应用程序中有大量的网格,很多都带有复选框编辑器,所以我希望能有一个“神奇”的小技巧来帮我做到这一点。我不想为我们的应用程序中的每个网格编写自定义代码:-/如果您(或您的客户)希望在单击单元格时复选框不会立即更改,那么如果您(或您的客户)
有没有一个简单的方法可以做到这一点?我们的应用程序中有大量的网格,很多都带有复选框编辑器,所以我希望能有一个“神奇”的小技巧来帮我做到这一点。我不想为我们的应用程序中的每个网格编写自定义代码:-/如果您(或您的客户)希望在单击单元格时复选框不会立即更改,那么如果您(或您的客户)将
ImmediatePost
属性设置为false
,则会有所帮助如果您希望在单元格中单击时复选框不会立即更改,那么如果您将ImmediatePost
属性设置为false
,可能不是您想要的确切答案,但可能满足了客户的要求,则复选框可能会有所帮助
对于cxGrid中的每个单元格,可以打开或关闭ImmediateEditor属性。此属性确定单击相应单元格后是否立即激活特定列编辑器
从cxGrid版本6的帮助文件中:
属性直接编辑器:布尔值
描述
使用ImmediateEditor属性确定用户单击相应单元格时是否激活特定列编辑器。如果此属性值为False,则当焦点位于特定单元格内时,按Enter键可激活网格单元格编辑器。可能不是您要寻找的确切答案,但它可能满足了客户的要求 对于cxGrid中的每个单元格,可以打开或关闭ImmediateEditor属性。此属性确定单击相应单元格后是否立即激活特定列编辑器 从cxGrid版本6的帮助文件中: 属性直接编辑器:布尔值 描述
使用ImmediateEditor属性确定用户单击相应单元格时是否激活特定列编辑器。如果此属性值为False,则当焦点位于特定单元格内时,按Enter键可激活网格单元格编辑器。我向DevExpress发送了与支持请求相同的问题,我得到了以下答案: “你好,斯文 感谢您的消息。您可以使用GridView的OnMouseDown事件处理程序并在那里检查命中信息来获得所需的结果。 附件是一个演示如何执行此任务的示例。请尝试此解决方案,并告诉我们您的结果。” 测试项目有一个带有复选框列的简单网格。GridView的OnMouseUp事件具有以下代码:
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事件在网格上,而不是列上,我无法为复选框列创建存储库项,但至少现在我知道了一种方法 我向DevExpress发送了与支持请求相同的问题,我得到了以下回答: “你好,斯文 感谢您的消息。您可以使用GridView的OnMouseDown事件处理程序并在那里检查命中信息来获得所需的结果。 附件是一个演示如何执行此任务的示例。请尝试此解决方案,并告诉我们您的结果。” 测试项目有一个带有复选框列的简单网格。GridView的OnMouseUp事件具有以下代码:
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事件在网格上,而不是列上,我无法为复选框列创建存储库项,但至少现在我知道了一种方法 为什么,你为什么要这么做?为什么要使应用程序更难使用?许多用户远不像大多数程序员那样熟练地使用鼠标。你认为微软为什么让所有窗口的标题栏和“x”关闭按钮都比Win2K之前大?我想这样做是因为这是客户的直接要求。他们发现很容易像现在这样无意中切换复选框。有时他们点击一个单元格只是为了聚焦一个特定的行,甚至没有注意到他们已经改变了它!为什么复选框在网格中的工作方式与在表单中的工作方式不同?总之,我完全不同意你的观点:-)为什么,哦,你为什么要这么做?为什么要使应用程序更难使用?许多用户远不像大多数程序员那样熟练地使用鼠标。你认为微软为什么让所有窗口的标题栏和“x”关闭按钮都比Win2K之前大?我想这样做是因为这是客户的直接要求。他们发现很容易像现在这样无意中切换复选框。有时他们点击一个单元格只是为了聚焦一个特定的行,甚至没有注意到他们已经改变了它!为什么复选框在网格中的工作方式与在表单中的工作方式不同?总之,我完全不同意你的观点:-)不,这没什么区别。该复选框仍然会切换,并且一旦用户离开单元格,值就会被发布。不,这没有任何区别。复选框仍然会切换,并且一旦用户离开单元格,值就会被发布。这确实会使无意中切换复选框变得更加困难,并且它将解决人们单击一行来设置焦点的问题,但它将改变整个网格的行为,而不仅仅是复选框。但这将保持处理的一致性!您试图引入一个行为不同的特殊单元格/编辑器。也许是时候进行客户培训了!?;-)我很愿意,但我们的客户很少,我们不能冒险疏远他们:-)这确实会让无意中切换复选框变得更困难,而且会解决问题