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目錄下