zoukankan      html  css  js  c++  java
  • 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); 

    使用 
    procedure TForm1.cxGrid1DBTableView1CustomDrawIndicatorCell( 
      Sender: TcxGridTableView; ACanvas: TcxCanvas; 
      AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean); 
    begin 
         SetRowNumber(Sender,AviewInfo,ACanvas,ADone); 
    end; 

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

  • 相关阅读:
    FZU 1005 Fast Food(dp)
    POJ 3186 Treats for the Cows(区间DP)
    2016郑州轻工业学院校赛 B 蛤玮的财宝
    c++大数模板
    2015轻院校赛 H五子棋
    poj 1015 Jury Compromise
    modbus协议说明(转)
    STM32 flash 内存分布介绍
    STM32 程序所占用空间计算 && FLASH存储的起始地址计算
    C float与char数组 互转
  • 原文地址:https://www.cnblogs.com/Values/p/3245254.html
Copyright © 2011-2022 走看看