加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Delphi cxGrid加行号

发布时间:2020-12-15 09:52:59 所属栏目:大数据 来源:网络整理
导读:procedure SetRowNumber( var ASender: TcxGridTableView; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ACanvas: TcxCanvas; var ADone: boolean); uses cxLookAndFeelPainters; procedure SetRowNumber( var ASender: TcxGridTableView; AViewInfo
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,序号,AFont,AFontTextColor,AColor); 
    ADone := True; 
  end ; 
  if not (AViewInfo is TcxGridIndicatorRowItemViewInfo) then 
    Exit; 
  ATextRect := AViewInfo.ContentBounds; 
  AIndicatorViewInfo := AViewInfo as TcxGridIndicatorRowItemViewInfo; 
  InflateRect(ATextRect,-1); 
  ASender.LookAndFeelPainter.DrawHeader(ACanvas,AViewInfo.ContentBounds,[bBottom,bLeft,bRight],IntToStr(AIndicatorViewInfo.GridRecord.Index + 1),AColor); 
  ADone := True; 
ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas,AIndicatorViewInfo.IndicatorKind); 
end;

如果你不要行标志的话,你可以不改控件?
直接注释掉这一行:?ASender.LookAndFeelPainter.DrawIndicatorImage(ACanvas,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!

?

效果图:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读