zoukankan      html  css  js  c++  java
  • Delphi cxGrid加行号

    procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo; 
      var ACanvas: TcxCanvas; var ADone: boolean); 
    
    uses cxLookAndFeelPainters; 
    
    procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo; 
      var ACanvas: TcxCanvas; var ADone: boolean); 
    var 
      AIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo; 
      ATextRect: TRect; 
      AFont: TFont; 
      AFontTextColor, AColor: TColor; 
    begin 
      AFont := ACanvas.Font; 
      AColor := clBtnFace; 
      AFontTextColor := clWindowText ; 
    if (AViewInfo is TcxGridIndicatorHeaderItemViewInfo) then begin 
      ATextRect := AViewInfo.Bounds; 
      InflateRect(ATextRect, -1, -1); 
         
       ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.Bounds, 
        ATextRect, [], cxBordersAll, cxbsNormal, taCenter, vaCenter, 
        False, False, '序号', AFont, AFontTextColor, AColor); 
        ADone := True; 
      end ; 
      if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then 
        Exit; 
      ATextRect := AViewInfo.ContentBounds; 
      AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo; 
      InflateRect(ATextRect, -1, -1); 
      ASender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds, 
        ATextRect, [], [bBottom, bLeft, bRight], cxbsNormal, taCenter, vaCenter, 
        False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1), 
        AFont, AFontTextColor, AColor); 
      ADone := True; 
    ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas, ATextRect, AIndicatorViewInfo.IndicatorKind); 
    end;

    如果你不要行标志的话,你可以不改控件 
    直接注释掉这一行: ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas, ATextRect, AIndicatorViewInfo.IndicatorKind); 
    要标志的话,在DrawIndicatorImage 从这里跟进去(Ctrl+左键单击) 
    在 cxLookAndFeelPainters 单元中作如下修改: 

    class procedure TcxCustomLookAndFeelPainter.DrawIndicatorImage(ACanvas: TcxCanvas; 
      const R: TRect; AKind: TcxIndicatorKind); 
    var 
      X, Y: Integer; 
    begin 
      if AKind = ikNone then Exit; 
      with cxIndicatorImages, R do 
      begin 
        X := (Left + Right - Width);              //靠右 
        Y := (Top + Bottom - Height) div 2;       //居中 
      end; 
      cxIndicatorImages.Draw(ACanvas.Canvas, X, Y, Ord(AKind) - 1); 
    end;

    注意,我已注明靠右的那一行, 就是去掉 DIV 2 了, 
    还要改一个地方: 
    SKIN控件目录下的dxSkinLookAndFeelPainter单元,找到 
    TdxSkinLookAndFeelPainter.DrawIndicatorImage 函数 
    的 
    OffsetRect(ARect, (Left + Right - cx div 2) , (Top + Bottom - cy) div 2); 
    这一行,将 (Left + Right - cx div 2) 改为(Left + Right - cx) 也是去掉 div 2 就是靠右; 
    修改后: OffsetRect(ARect, (Left + Right - cx) , (Top + Bottom - cy) div 2); 

    使用 

    1 procedure TForm1.cxGrid1DBTableView1CustomDrawIndicatorCell( 
    2   Sender: TcxGridTableView; ACanvas: TcxCanvas; 
    3   AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean); 
    4 begin 
    5      SetRowNumber(Sender,AviewInfo,ACanvas,ADone); 
    6 end; 

    另外序号列的列宽最好改为35!



    效果图:

  • 相关阅读:
    【MySQL】JSON相关
    【Scala】01 基础了解
    【Windows】更改Win10字体和Cmd字体
    【DataBase】MySQL根据父节点查询下面的所有子节点
    【Windows】Win10 20H2版本 管理员身份问题
    【Java】树状节点结构的数据
    【Vue】接口模块化处理
    【Server
    【Binary】XShell6 无法使用的解决办法
    【Java】逻辑错误BUG
  • 原文地址:https://www.cnblogs.com/jijm123/p/10425011.html
Copyright © 2011-2022 走看看