unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, cxStyles, dxSkinsCore, dxSkinsDefaultPainters,
dxSkinscxPCPainter, cxCustomData, cxGraphics, cxFilter, cxData,
cxDataStorage, cxEdit, DB, cxDBData, cxGridCustomTableView,
cxGridTableView, cxGridDBTableView, cxGridLevel, cxClasses, cxControls,
cxGridCustomView, cxGrid, ADODB;
type
TForm1 = class(TForm)
ADOTable1: TADOTable;
ADOConnection1: TADOConnection;
cxGrid1DBTableView1: TcxGridDBTableView;
cxGrid1Level1: TcxGridLevel;
cxGrid1: TcxGrid;
DataSource1: TDataSource;
cxGrid1DBTableView1ProductID: TcxGridDBColumn;
cxGrid1DBTableView1ProductName: TcxGridDBColumn;
cxGrid1DBTableView1SupplierID: TcxGridDBColumn;
cxGrid1DBTableView1CategoryID: TcxGridDBColumn;
cxGrid1DBTableView1QuantityPerUnit: TcxGridDBColumn;
cxGrid1DBTableView1UnitPrice: TcxGridDBColumn;
cxGrid1DBTableView1UnitsInStock: TcxGridDBColumn;
cxGrid1DBTableView1UnitsOnOrder: TcxGridDBColumn;
cxGrid1DBTableView1ReorderLevel: TcxGridDBColumn;
cxGrid1DBTableView1Discontinued: TcxGridDBColumn;
cxGrid1DBTableView1CategoryName: TcxGridDBColumn;
procedure cxGrid1DBTableView1CustomDrawIndicatorCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure SetRowNumber(var ASender: TcxGridTableView; AViewInfo:
TcxCustomGridIndicatorItemViewInfo;
var ACanvas: TcxCanvas; var ADone: boolean);
var
Form1: TForm1;
implementation
{$R *.dfm}
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, 'NO', 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 AIndicatorViewInfo.GridRecord.Selected then
AFont.Style := ACanvas.Font.Style + [fsBold]
else
AFont.Style := ACanvas.Font.Style - [fsBold];
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;
procedure TForm1.cxGrid1DBTableView1CustomDrawIndicatorCell(
Sender: TcxGridTableView; ACanvas: TcxCanvas;
AViewInfo: TcxCustomGridIndicatorItemViewInfo; var ADone: Boolean);
begin
SetRowNumber(Sender, AviewInfo, ACanvas, ADone);
end;
end.
把cxGridView里OptionsView选项中的两项修改成如下
OptionsView.Indicator = True
OptionsView.IndicatorWidth = 32//宽度
其实这个方法就是cxGrid范例中提供的,原范例在CellLevelMultiselectDemo目录下