CXGRID 增加序号列
本文由 猛 于 2024-1-16 18:46 发布在 Delphi
效果图:
private procedure SetRowNumber(var Sender: TcxGridTableView; var AViewInfo: TcxCustomGridIndicatorItemViewInfo; ACanvas: TcxCanvas; var ADone: boolean);
procedure TfrmMain.SetRowNumber(var Sender: TcxGridTableView; var AViewInfo: TcxCustomGridIndicatorItemViewInfo; ACanvas: TcxCanvas; var ADone: boolean); var AIndicatorViewInfo: TcxGridIndicatorRowItemViewInfo; ATextRect: TRect; AFont: TFont; AFontTextColor, AColor: TColor; procedure DrawIndicatorImage(ACanvas: TcxCanvas; const R: TRect; AKind: TcxIndicatorKind); var X, Y: Integer; begin if AKind = ikNone then Exit; X := (R.Left + R.Right - cxLookAndFeelPainters.cxIndicatorImages.Width); Y := (R.Top + R.Bottom - cxLookAndFeelPainters.cxIndicatorImages.Height) div 2; cxLookAndFeelPainters.cxIndicatorImages.Draw(ACanvas.Canvas, X, Y, Ord(AKind) - 1); end; begin try AFont := ACanvas.Font; AColor := clBtnFace; AFontTextColor := clWindowText; if (AViewInfo is TcxGridIndicatorHeaderItemViewInfo) then begin ATextRect := AViewInfo.Bounds; InflateRect(ATextRect, -1, -1); Sender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.Bounds, ATextRect, [], cxBordersAll, cxbsNormal, taCenter, TcxAlignmentVert.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); if Sender.DataController.RecordCount > 0 then begin if AIndicatorViewInfo.GridRecord.Selected then AFontTextColor := clRed else AFontTextColor := clWindowText; end; Sender.LookAndFeelPainter.DrawHeader(ACanvas, AViewInfo.ContentBounds, ATextRect, [], [bBottom, bLeft, bRight], cxbsNormal, taCenter, TcxAlignmentVert.vaCenter, False, False, IntToStr(AIndicatorViewInfo.GridRecord.Index + 1), AFont, AFontTextColor, AColor); ADone := True; except end; DrawIndicatorImage(ACanvas, ATextRect, AIndicatorViewInfo.IndicatorKind); end;
procedure TfrmMain.cxGridPlanBOMDBTableView1CustomDrawIndicatorCell(Sender: TcxGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean); begin SetRowNumber(Sender, AViewInfo, ACanvas, ADone); //调用SetRowNumber函数,函数声明及实现见后 end;
引用:https://www.cnblogs.com/redhat588/p/15830422.html
原型图案例>>