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!



    效果图:

  • 相关阅读:
    JSP三大指令是什么?
    jsp和servlet的区别、共同点、各自应用的范围
    1.说一说Servlet的生命周期?
    .查询姓“李”的老师的个数;
    jquery 主要内容有两大部分:
    jQuery的优势:
    JDBC的PreparedStatement是什么?
    execute,executeQuery,executeUpdate的区别是什么?
    String和StringBuffer、StringBuilder的区别是什么?String为什么是不可变的
    数据维护不求人,一招搞定增删改
  • 原文地址:https://www.cnblogs.com/jijm123/p/10425011.html
Copyright © 2011-2022 走看看