Hi,
I have created tables to be inserted in the TRichViewEdit component. Is there anyway I can set a table's line style to dotted line? Under the TRVTableItemInfo class, i can set the BorderStyle and BorderColor, but i would like the line style to be dotted instead of a solid line. Is that possible?
Set table line style to dotted line
-
- Site Admin
- Posts: 17557
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
-
- Posts: 5
- Joined: Thu Feb 08, 2007 12:50 am
Ok, I'm trying the OnDrawBorder event as u said. I'm not sure what I did wrong, but it doesn't seem to call the OnDrawBorder event. Here's my code snippet.
procedure TForm1.Button2Click(Sender: TObject);
var
l_Status, l_Pos : Integer;
l_WideString : widestring;
l_RVTable : TRVTableItemInfo;
l_stream : TStringStream;
begin
WideString := u_RTFString;
l_RVTable := TRVTableItemInfo.CreateEx(1, 1, RichViewEdit2.RVData);
l_RVTable.OnDrawBorder := DrawBorderDo;
l_stream := TStringStream.Create('');
l_Stream.WriteString(l_WideString);
l_stream.Seek(0, soFromBeginning);
l_RVTable.Cells[0,0].LoadRTFFromStream(l_Stream);
RichViewEdit2.AddItem('x', l_RVTable);
RichViewEdit2.SaveRTF('C:\Testing.rtf', False);
l_Stream.free;
end;
procedure TForm1.DrawBorderDo(Sender: TRVTableItemInfo;
Canvas: TCanvas; Left,Top,Right,Bottom, Width: Integer;
LightColor, Color, BackgroundColor: TColor;
Style: TRVTableBorderStyle; Printing: Boolean;
VisibleBorders: TRVBooleanRect; Row, Col: Integer;
var DoDefault: Boolean);
begin
if Width=0 then
exit;
inc(Right);
inc(Bottom);
Canvas.Pen.Color := clRed;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 5;
Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(Left,Top,Right,Bottom);
DoDefault := False;
end;
Do note that the code above doesnt draw a dotted line table yet, as I am just trying to see if the OnDrawBorder event is triggered. But I'm assuming that to draw dotted line, i just have to set the pen.Style = psDot rite?
So when i step through the codes, the event does not get triggered, and my rtf doc also doesnt show the table line in red color. Why was it not triggered?
procedure TForm1.Button2Click(Sender: TObject);
var
l_Status, l_Pos : Integer;
l_WideString : widestring;
l_RVTable : TRVTableItemInfo;
l_stream : TStringStream;
begin
WideString := u_RTFString;
l_RVTable := TRVTableItemInfo.CreateEx(1, 1, RichViewEdit2.RVData);
l_RVTable.OnDrawBorder := DrawBorderDo;
l_stream := TStringStream.Create('');
l_Stream.WriteString(l_WideString);
l_stream.Seek(0, soFromBeginning);
l_RVTable.Cells[0,0].LoadRTFFromStream(l_Stream);
RichViewEdit2.AddItem('x', l_RVTable);
RichViewEdit2.SaveRTF('C:\Testing.rtf', False);
l_Stream.free;
end;
procedure TForm1.DrawBorderDo(Sender: TRVTableItemInfo;
Canvas: TCanvas; Left,Top,Right,Bottom, Width: Integer;
LightColor, Color, BackgroundColor: TColor;
Style: TRVTableBorderStyle; Printing: Boolean;
VisibleBorders: TRVBooleanRect; Row, Col: Integer;
var DoDefault: Boolean);
begin
if Width=0 then
exit;
inc(Right);
inc(Bottom);
Canvas.Pen.Color := clRed;
Canvas.Pen.Style := psSolid;
Canvas.Pen.Width := 5;
Canvas.Brush.Style := bsSolid;
Canvas.Rectangle(Left,Top,Right,Bottom);
DoDefault := False;
end;
Do note that the code above doesnt draw a dotted line table yet, as I am just trying to see if the OnDrawBorder event is triggered. But I'm assuming that to draw dotted line, i just have to set the pen.Style = psDot rite?
So when i step through the codes, the event does not get triggered, and my rtf doc also doesnt show the table line in red color. Why was it not triggered?
-
- Site Admin
- Posts: 17557
- Joined: Sat Aug 27, 2005 10:28 am
- Contact:
Table events cannot be saved in files.
You need to reassign item events when table is inserted in the document.
Use OnItemAction event:
Of course, this event will be called only when displaying this table in your application.
You need to reassign item events when table is inserted in the document.
Use OnItemAction event:
Code: Select all
procedure TForm3.RichViewEdit1ItemAction(Sender: TCustomRichView;
ItemAction: TRVItemAction; Item: TCustomRVItemInfo; var Text: String;
RVData: TCustomRVData);
begin
if (ItemAction=rviaInserted) and (Item is TRVTableItemInfo) then
TRVTableItemInfo(Item).OnDrawBorder := DrawBorderDo.
end;