delphi使用RichView控件 增大表格字号
TRichView增大表格字号
增加事件版
设置
-
在窗体上放置TRichViewEdit组件RichViewEdit1和TRVStyle组件RVStyle1,并设置RichViewEdit1的
Style
属性指向RVStyle1 -
增加RichViewEdit1的
OnStyleConversion
事件RichViewEdit1StyleConversion
-
在窗体上放置TButton组件Button1 和 Button2,并设置Button1的
Caption
为创建表格 Button2的Caption
为增加字体
操作
点击Button1在 RichViewEdit1 中创建表格,再点击Button2 增加表格中文本内容的字号
代码
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RVStyle, RVScroll, RichView, RVEdit;
type
TForm1 = class(TForm)
RichViewEdit1: TRichViewEdit;
RVStyle1: TRVStyle;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; StyleNo, UserData: Integer;
AppliedToText: Boolean; var NewStyleNo: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses RVTable, RVItem;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
Table: TRVTableItemInfo;
Row, Col: Integer;
begin
//创建5行4列的表格
Table := TRVTableItemInfo.CreateEx(5, 4, RichViewEdit1.RVData);
//设置表格边框和背景色
Table.Color := clNone;
Table.BorderStyle := rvtbColor;
Table.CellBorderStyle := rvtbColor;
Table.BorderWidth := 1;
Table.CellBorderWidth := 1;
//添加表格数据
for Row := 0 to Table.RowCount - 1 do
for Col := 0 to Table.ColCount - 1 do
begin
Table.Cells[Row, Col].BestWidth := 60;
Table.Cells[Row, Col].BestHeight := 20;
Table.Cells[Row, Col].Color := clCream;
Table.Cells[Row, Col].Clear;
Table.Cells[Row, Col].AddFmt('%d,%d', [Row, Col], 0, 0);
end;
//合并单元格(从第3行第2列开始,合并2行)
Table.MergeCells(2, 1, 1, 2, True);
//将表格添加到文档中
RichViewEdit1.InsertItem('', Table);
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ItemNo: Integer;
table: TRVTableItemInfo;
FOldOnStyleConversion: TRVStyleConversionEvent;
begin
//查找表格
for ItemNo := 0 to RichViewEdit1.ItemCount - 1 do
begin
if RichViewEdit1.GetItemStyle(ItemNo) = rvsTable then
begin
table := RichViewEdit1.GetItem(ItemNo) as TRVTableItemInfo;
//选择表格(全选)
table.SelectRows(0, table.RowCount);
//调用文本样式转换
RichViewEdit1.ApplyStyleConversion(0, True);
//取消选择表格
table.Deselect;
end;
end;
end;
procedure TForm1.RichViewEdit1StyleConversion(Sender: TCustomRichViewEdit; StyleNo,
UserData: Integer; AppliedToText: Boolean; var NewStyleNo: Integer);
var FontInfo: TFontInfo;
Size: Integer;
begin
//AppliedToText = False 在输入内容前,修改字体时会触发
//AppliedToText = True 修改输入的内容会触发
//修改输入的内容的字体时,会先触发一次AppliedToText = False,再根据选择的内容中文本样式数触发对应数的AppliedToText = True
if not AppliedToText then Exit;
//如果此事件是为转换文本项的样式而调用的,设置了保护文本不改变样式时,不进行修改
if AppliedToText and (rvprStyleProtect in Sender.Style.TextStyles[StyleNo].Protection) then
Exit;
//如果它被调用来转换当前文本样式 (CurTextStyleNo),设置了保护文本不改变样式或不自动切换样式时,不进行修改
if not AppliedToText and
((rvprStyleProtect in Sender.Style.TextStyles[StyleNo].Protection) or
(rvprDoNotAutoSwitch in Sender.Style.TextStyles[StyleNo].Protection)) then
Exit;
FontInfo := TFontInfo.Create(nil);
try
//复制当前字体
FontInfo.Assign(Sender.Style.TextStyles[StyleNo]);
//增大一号字体
Size := FontInfo.Size;
Inc(Size);
FontInfo.Size := Size;
//设置新增字体的样式索引
NewStyleNo := Sender.Style.FindTextStyle(FontInfo);
finally
FontInfo.Free;
end;
end;
end.
事件赋值版
不增加RichViewEdit1的OnStyleConversion
事件,改为创建TRVStyleConversionEvent
方法 NewOnStyleConversion
对OnStyleConversion
事件赋值
处理更灵活
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, RVStyle, RVScroll, RichView, RVEdit;
type
TForm1 = class(TForm)
RichViewEdit1: TRichViewEdit;
RVStyle1: TRVStyle;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
/// <summary>
/// 文本样式自定义转换
/// </summary>
procedure NewOnStyleConversion(Sender: TCustomRichViewEdit; StyleNo, UserData: Integer;
AppliedToText: Boolean; var NewStyleNo: Integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses RVTable, RVItem;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
//...代码相同
end;
procedure TForm1.NewOnStyleConversion(Sender: TCustomRichViewEdit; StyleNo, UserData: Integer;
AppliedToText: Boolean; var NewStyleNo: Integer);
var FontInfo: TFontInfo;
Size: Integer;
begin
//...与RichViewEdit1StyleConversion代码相同
end;
procedure TForm1.Button2Click(Sender: TObject);
var
ItemNo: Integer;
table: TRVTableItemInfo;
FOldOnStyleConversion: TRVStyleConversionEvent;
begin
//查找表格
for ItemNo := 0 to RichViewEdit1.ItemCount - 1 do
begin
if RichViewEdit1.GetItemStyle(ItemNo) = rvsTable then
begin
table := RichViewEdit1.GetItem(ItemNo) as TRVTableItemInfo;
//选择表格(全选)
table.SelectRows(0, table.RowCount);
//设置选择文本样式自定义转换事件
FOldOnStyleConversion := RichViewEdit1.OnStyleConversion;
RichViewEdit1.OnStyleConversion := NewOnStyleConversion;
try
//调用文本样式转换
RichViewEdit1.ApplyStyleConversion(0, True);
finally
RichViewEdit1.OnStyleConversion := FOldOnStyleConversion;
end;
//取消选择表格
table.Deselect;
end;
end;
end;
end.