Добрый день.
Хочу написать как реализовать отображение номера столбца в отдельной строке под заголовком в TDBGridEh
Реализация 1:
Установить рeжим MultiTitle
Код:
TDBGridEh.TitleParams.MultiTitle = True
и для каждого столбца добавить в текст заголовка номер через символ "|"
Код:
Column.Title.Caption = 'Name1|1'
Column.Title.Caption = 'Name2|2'
Реализация 2:
Написать наследник грида и реализовать свойство которое будет отображать строку с номерами автоматически
Вложение:
sshot-151.png [ 16.28 KiB | Просмотров: 9889 ]
Код:
{ TMyDBGridEh }
TMyDBGridEh = class(TDBGridEh)
private
FUnderTitleColIndexes: Boolean;
procedure SetUnderTitleColIndexes(const Value: Boolean);
protected
function GetTitleRows: Integer; override;
procedure DrawTitleCell(ACol, ARow: Longint; AreaCol, AreaRow: Longint; ARect: TRect; AState: TGridDrawState; CellAreaType: TCellAreaTypeEh); override;
public
property UnderTitleColIndexes: Boolean read FUnderTitleColIndexes write SetUnderTitleColIndexes;
end;
type
TDBGridDrawTitleCellParamsEhCrack = class(TDBGridDrawTitleCellParamsEh);
{ TMyDBGridEh }
procedure TMyDBGridEh.DrawTitleCell(ACol, ARow, AreaCol, AreaRow: Longint;
ARect: TRect; AState: TGridDrawState; CellAreaType: TCellAreaTypeEh);
var
DrawColumn: TColumnEh;
CelDrawSt: TDBGridDrawTitleCellParamsEhCrack;
begin
if (UnderTitleColIndexes) and (ARow = GetTitleRows - 1) then
begin
DrawColumn := Columns[AreaCol];
CelDrawSt := TDBGridDrawTitleCellParamsEhCrack(FTitleCellDrawState);
CelDrawSt.FColumn := DrawColumn;
CelDrawSt.FMultiTitleNode := nil;
FillTitleCellDrawParams(ACol, ARow, AreaCol, AreaRow, ARect, AState,
CellAreaType, CelDrawSt);
DrawTitleCellBackground(Canvas, ARect, CelDrawSt);
WriteTextEh(Canvas, ARect, False, 0, 0, DrawColumn.Index.ToString,
taCenter, tlCenter, False, False, 0, 0, False, False);
end else
begin
inherited DrawTitleCell(ACol, ARow, AreaCol, AreaRow, ARect, AState, CellAreaType);
end;
end;
function TMyDBGridEh.GetTitleRows: Integer;
begin
Result := inherited GetTitleRows;
if UnderTitleColIndexes then
Result := Result + 1;
end;
procedure TMyDBGridEh.SetUnderTitleColIndexes(const Value: Boolean);
begin
if (FUnderTitleColIndexes <> Value) then
begin
FUnderTitleColIndexes := Value;
LayoutChanged;
end;
end;