rvico TRichView Reference | Item Types | Table

TRVTableItemInfo.OnDrawBorder

Top  Previous  Next

Allows custom drawing of table borders

type

  TRVTableDrawBorderEvent = procedure (Sender: TRVTableItemInfo;

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

    Width: TRVStyleLength;

    LightColor, Color, BackgroundColor: TColor;

    Style: TRVTableBorderStyle; Printing: Boolean;

    VisibleBorders: TRVBooleanRect; Row, Col: Integer;

    var DoDefault: Boolean) of object;

 

property OnDrawBorder: TRVTableDrawBorderEvent;

(introduced in version 1.7, modified in 1.8)

Input parameters

Sender – the table to draw border for (border can be drawn for the table itself or for the table cells).

Canvas – canvas where to draw.

Left, Top, Right, Bottom – rectangle for the border.

Width – border width, in Sender.Style.Units.

LightColor, Color, BackgroundColor – colors for border and for background (be careful - cell border is drawn after drawing cell content)

Style – border style.

PrintingTrue if this drawing is for printing; False if on screen.

VisibleBordersVisibleBorders property for the table, or VisibleBorders property for the cell.

Row, Col – row and column of the cell (or -1 if this is a table border).

Output parameters

DoDefault – set to False to cancel the default border drawing.

 

For example,

{ Drawing a hairline border (both on screen and printer), 

  assuming that CellBorderWidth=1, CellVSpacing=0, CellHSpacing=0. 

  This example ignores VisibleBorders.

}

procedure TMyForm.DoDrawBorder(Sender: TRVTableItemInfo; Canvas: TCanvas;

  Left, Top, Right, Bottom: Integer; Width: TRVStyleLength;

  LightColor, Color, BackgroundColor: TColor; 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;

Tables are not components, so their events cannot be assigned at design time in the Object Inspector. They must be assigned in code. Events are not saved in RVF files, so you need to reassign them when tables are loaded. The best place to assign this event is TRichView.OnItemAction event.

// MyRichViewEdit.OnItemAction. Assigns DoDrawBorder to

// OnDrawBorder events of all tables inserted in MyRichViewEdit.

// (this assignment occurs when table is inserted using 

// AddItem or InsertItem methods, or is loaded from RVF or RTF file)

procedure TMyForm.MyRichViewEditItemAction(Sender: TCustomRichView;

  ItemAction: TRVItemAction; Item: TCustomRVItemInfovar Text: String;

  RVData: TCustomRVData);

begin

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

    TRVTableItemInfo(Item).OnDrawBorder := DoDrawBorder;

end;


TRichView © trichview.com