针对cxGrid表格控件不存在选中框(Cell)添加加粗边框功能, 因此对cxGrid表格TcxGridTableView中属性 OnCustomDrawCell进行相应代码编写, 以对选中框重新绘制, 实现该功能。
1.代码添加前小知识
首先看一下OnCustomDrawCell中的属性信息
OnCustomDrawCell ( Sender: TcxCustomGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
添加边框代码需要运用 ACanvas(Dev 自身画布), AViewInfo(利用该类可获得Cell信息, 比如Cell的范围Rect, 或者Cell的值 Value……), ADone这个值也有其特殊含义,在下面代码添加的时候描述。
2.代码描述(OnCustomDrawCell 事件中描述)
var
aRect: TRect;
begin
{以下代码用来去除cxGrid表格中自身选中行Focus虚线,该代码不添加会影响添加边框的显示效果}
if AViewInfo.GridView.OptionsView.FocusRect then
AViewInfo.GridView.OptionsView.FocusRect := False;
{此处介绍一下ADone属性, DEV Cell 进行绘制的时候,首先会判断已经存在自定义的绘制代码,即OnCustomDrawCell中是否已经存在事件, 如果存在,那么会先执行自定义代码, 执行完 自定义代码后,DEV 会根据 ADone值, 如果该值为False, 会进行DEV内部表格绘制, 也就是说执行DEV的代码,绘制表格信息, 如果为True, DEV不再执行内部代码,也就是说界面上显示的为用户自定义的代码。此处我们将ADone 设置为True,如果此处不为True,意味着CELL自定义绘制信息,可能会被DEV之后的执行代码清空, 为什么要说可能会被清空:因为在DEV之后重新绘制的时候,对背景的绘制采用用户定义信息, 这就是为
什么斑马等能够成功设置的原因}
ADone := True;
{one := True 说明将采用用户自定义绘制代码, 那就需要首先针对表格内信息进行重新绘制,绘制完成后,加上相应的边框, 一下代码就是调用DEV内部代码, 对CELL进行绘制}
AViewInfo.EditViewInfo.Paint(ACanvas);
{下面代码应该比较易懂了, 绘制边框, 也就是绘制4条边框线, 不要使用绘制矩形, 因为绘制矩形, 会使得内部显示信息也要重新绘制, 代码量复杂而且不实用, 绘制成功后,将Pen宽度充置为1,否则会显示出问题}
aRect := AViewInfo.EditBounds;
if AViewInfo.GridView.Controller.FocusedItem <> nil then
begin
if (AViewInfo.Item = AViewInfo.GridView.Controller.FocusedItem) and
(AViewInfo.GridRecord.Index = AViewInfo.GridView.DataController.FocusedRowIndex) then
begin
ACanvas.Pen.Width := 2;
ACanvas.Pen.Color := clBlack;
ACanvas.MoveTo(aRect.Left, aRect.Top);
ACanvas.LineTo(aRect.Right, aRect.Top);
ACanvas.MoveTo(aRect.Left, aRect.Top);
ACanvas.LineTo(aRect.Left, aRect.Bottom);
ACanvas.MoveTo(aRect.Right, aRect.Top);
ACanvas.LineTo(aRect.Right, aRect.Bottom);
ACanvas.MoveTo(aRect.Left, aRect.Bottom);
ACanvas.LineTo(aRect.Right, aRect.Bottom);
ACanvas.Pen.Width := 1;
end;
end
end;gridview不显示
3.具体修改
在原有的OnCustomDrawCell后添加
SetGridViewSelectRange(ACanvas, AViewInfo, ADone);
SetGridViewSelectRange代码已经被封装在USystemControlInterface中, 代码内容也就是 以上所描述的
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论