<< Click to display table of contents >>


Allows custom drawing of table borders


  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.

Printing True if this drawing is for printing; False if on screen.

VisibleBorders VisibleBorders 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);


  if Width=0 then




  Canvas.Pen.Color := Color;

  Canvas.Pen.Style := psInsideFrame;

  Canvas.Pen.Width := 1;

  Canvas.Brush.Style := bsClear;


  DoDefault := False;


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);


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

    TRVTableItemInfo(Item).OnDrawBorder := DoDrawBorder;


See also