TRVTableItemInfo.OnDrawBorder

<< Нажмите, чтобы показать Содержание >>

TRVTableItemInfo.OnDrawBorder

Позволяет нестандартное рисование рамки таблицы и ячеек.

type

  TRVTableDrawBorderEvent = procedure (Sender: TRVTableItemInfo;

    Canvas: TCanvas; Left,Top,Right,Bottom: TRVCoord;

    Width: TRVStyleLength;

    LightColor, Color, BackgroundColor: TRVColor;

    Style: TRVTableBorderStyle; Printing: Boolean;

    VisibleBorders: TRVBooleanRect; Row, Col: Integer;

    var DoDefault: Boolean) of object;

 

property OnDrawBorder: TRVTableDrawBorderEvent;

Входные параметры:

Sender таблица, для которой рисуется рамка (либо самой таблицы, либо её ячейки).

Canvas канва для рисования.

Left, Top, Right, Bottom прямоугольная область рамки.

Width толщина рамки, в единицах Sender.Style.Units.

LightColor, Color, BackgroundColor цвета рамки и фона (осторожно, рамка рисуется после содержимого)

Style тип рамки.

Printing True, если рисование происходит для печати; False, если на экране.

VisibleBorders – значение свойства VisibleBorders таблицы или VisibleBorders ячейки.

Row, Col строка и столбец ячейки (или -1 для самой таблицы).

Выходные параметры:

DoDefault установите в False, чтобы отменить стандартное рисование рамки.

 

Пример:

{ Рисование максимально тонкой рамки (как на экране, так и на принтере).

  Предполагается что CellBorderWidth=1, CellVSpacing=0, CellHSpacing=0. 

  Пример не учитывает свойства VisibleBorders.

}

procedure TMyForm.DoDrawBorder(Sender: TRVTableItemInfo;

  Canvas: TCanvas; Left, Top, Right, Bottom: TRVCoord;

  Width: TRVStyleLength;

  LightColor, Color, BackgroundColor: TRVColor

  Style: TRVTableBorderStyle

  Printing: Boolean; VisibleBorders: TRVBooleanRect; 

  var DoDefault: Boolean);

begin

  if Width=0 then

    exit;

  inc(Right);

  inc(Bottom);

  Canvas.Pen.Color := Color;

  Canvas.Pen.Style := psInsideFrame;

  Canvas.Pen.Width := 1;

  Canvas.Brush.Style := bsClear;

  Canvas.Rectangle(Left,Top,Right,Bottom);

  DoDefault := False;

end;

Поскольку таблицы не являются компонентами, их события нельзя назначать во время проектирования в Инспекторе объектов. События необходимо назначать программно при создании таблицы. События не сохраняются в файлах RVF, поэтому требуется переназначать их после загрузки таблицы из файла. Лучшее место для этого – обработчик события TRichView.OnItemAction.

// MyRichViewEdit.OnItemAction. Присваивает DoDrawBorder событиям

// OnDrawBorder всех таблиц, вставляемых в MyRichViewEdit.

// (происходит когда таблица вставляется методами

// AddItem или InsertItem, или загружается из файла)

procedure TMyForm.MyRichViewEditItemAction(Sender: TCustomRichView

  ItemAction: TRVItemAction; Item: TCustomRVItemInfo

  var Text: TRVUnicodeString; RVData: TCustomRVData);

begin

  if (Item.StyleNo = rvsTable) and (ItemAction = rviaInserting) then

    TRVTableItemInfo(Item).OnDrawBorder := DoDrawBorder;

end;

См. также:

OnDrawBackground