delphi使用RichView控件 增大表格字号

TRichView增大表格字号

增加事件版

设置

  1. 在窗体上放置TRichViewEdit组件RichViewEdit1TRVStyle组件RVStyle1,并设置RichViewEdit1Style属性指向RVStyle1

  2. 增加RichViewEdit1OnStyleConversion事件RichViewEdit1StyleConversion

  3. 在窗体上放置TButton组件Button1Button2,并设置Button1Caption创建表格 Button2Caption增加字体

操作

点击Button1RichViewEdit1 中创建表格,再点击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.

事件赋值版

不增加RichViewEdit1OnStyleConversion事件,改为创建TRVStyleConversionEvent 方法 NewOnStyleConversionOnStyleConversion事件赋值

处理更灵活

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.
posted @ 2022-02-25 18:31  txgh  阅读(188)  评论(0编辑  收藏  举报