针对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小时内删除。