TRichView控件的常用用法(增加文本和图片)

本文详细介绍了富文本编辑器的核心组件及其功能,包括文本和图片的添加、编辑、格式化和背景设置。重点阐述了如何通过Delphi语言实现富文本编辑器的基本操作,如添加文本、图片,修改行距,改变背景图片和调整文字样式。同时提供了实例代码,便于开发者快速理解和应用。

unit UnitFrmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, RVStyle, RVScroll, RichView, RVEdit, ComCtrls;

type
  TFormMain = class(TForm)
    RvEdit: TRichViewEdit;
    RVStyleCommon: TRVStyle;
    BtnEditAddText: TButton;
    RvView: TRichView;
    BtnViewAddText: TButton;
    BtnChangeLineSpacing: TButton;
    BtnEditAddPicture: TButton;
    BtnViewAddPicture: TButton;
    SBarMain: TStatusBar;
    BtnChangeBgImage: TButton;
    procedure BtnEditAddTextClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure BtnViewAddTextClick(Sender: TObject);
    procedure BtnChangeLineSpacingClick(Sender: TObject);
    procedure BtnEditAddPictureClick(Sender: TObject);
    procedure BtnViewAddPictureClick(Sender: TObject);
    procedure RvEditJump(Sender: TObject; id: Integer);
    procedure RvViewJump(Sender: TObject; id: Integer);
    procedure BtnChangeBgImageClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

uses
   Math, GifImg, RVGifAnimate2007, CRVFData;

procedure RichViewAddPicture(RichView: TCustomRichView; const PicName: string;
  Stream: TMemoryStream; IsGif: Boolean);
var
  LGraphic: TGraphic;
begin
  if IsGif then
  begin
    LGraphic := TGIFImage.Create;
  end else
  begin
    LGraphic := TBitmap.Create;
  end;

  Stream.Position := 0;
  LGraphic.LoadFromStream(Stream);

  //在这里ParaNo=-1表示增加的还在上一个段落中
  RichView.AddPictureEx(PicName, LGraphic, -1, rvvaBaseline);
end;

// 向RichView中增加单个文本对象
// 注意:此函数中S不能包含 (#13, #10, #9, #12)字符
procedure RichViewAddText(RV: TCustomRichView; const S: string;
  FontInfo: TFontInfo; ParaNo: Integer; Tag: Integer);
const
  RV_FIND_PROP: TRVFontInfoProperties =
    [rvfiFontName, rvfiSize, rvfiBold, rvfiItalic,
    rvfiUnderline, rvfiStrikeout, rvfiColor, rvfiUnicode, rvfiJump];
var
  LStyleNo: Integer;
  LNewFontInfo: TFontInfo;
begin
  // 从关联的RVStyle中查找是否存在样式,这样能减小RvStyle中条目个数
  LStyleNo := RV.Style.TextStyles.FindSuchStyle(0, FontInfo, RV_FIND_PROP);
  if LStyleNo < 0 then
  begin
    LNewFontInfo := RV.Style.TextStyles.Add;
    LNewFontInfo.Assign(FontInfo);
    LNewFontInfo.Unicode := True;
    LStyleNo := RV.Style.TextStyles.Count - 1;
  end;

  RV.AddNLWTag(S, LStyleNo, ParaNo, Tag);
end;

procedure RichViewAddTextEx(RV: TCustomRichView;
  const S: string; const FontName: string; FontSize: Integer;
  FontColor: TColor; FontStyle: TFontStyles; IsJump: Boolean;
  ParaNo, Tag: Integer);
var
  LFontInfo: TFontInfo;
begin
  LFontInfo := TFontInfo.Create(nil);
  try
    LFontInfo.FontName := FontName;
    LFontInfo.Size := FontSize;
    LFontInfo.Color := FontColor;
    LFontInfo.Style := FontStyle;
    LFontInfo.Unicode := True;
    LFontInfo.Jump := IsJump;

    RichViewAddText(RV, S, LFontInfo, ParaNo, Tag);
  finally
    LFontInfo.Free;
  end;
end;

procedure TFormMain.BtnChangeBgImageClick(Sender: TObject);
begin
  // 注意:Load加载仅支持Bmp
  RvView.BackgroundBitmap.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\BgImage.BMP');
  RvView.BackgroundStyle := bsTiled;

  RvEdit.BackgroundBitmap.LoadFromFile(ExtractFileDir(ParamStr(0)) + '\BgImage.BMP');
  RvEdit.BackgroundStyle := bsTiled;
end;

procedure TFormMain.BtnChangeLineSpacingClick(Sender: TObject);
begin
  //改行距实际上是要改动RVStyle中的段落样式的值
  //其中LineSpacingType还是其他值,可以参考帮助文档
  RVStyleCommon.ParaStyles[0].LineSpacing := RandomRange(50, 200);
  RVStyleCommon.ParaStyles[0].LineSpacingType := rvlsPercent;

  //重新格式化一下会立即显示
  RvEdit.Reformat;
  RvView.Reformat;
end;

procedure TFormMain.BtnEditAddPictureClick(Sender: TObject);
var
  LStream: TMemoryStream;
begin
  LStream := TMemoryStream.Create;
  try
    LStream.LoadFromFile('Face.gif');

    //注意:在Delphi2007下必须在RichViewEdit所在的Pas文件中,
    //      加入RVGifAnimate2007单元引用,否则不会播放

    //要设置动画格式为根据格式定义并启动动画
    RvEdit.AnimationMode := rvaniOnFormat;
    RvEdit.StartAnimation;

    RichViewAddPicture(RvEdit, 'Face1', LStream, True);
    RvEdit.Format;
  finally
    LStream.Free;
  end;
end;

procedure TFormMain.BtnViewAddPictureClick(Sender: TObject);
var
  LStream: TMemoryStream;
begin
  LStream := TMemoryStream.Create;
  try
    LStream.LoadFromFile('Face.gif');

    //注意:在Delphi2007下必须在RichViewEdit所在的Pas文件中,
    //      加入RVGifAnimate2007单元引用,否则不会播放

    //要设置动画格式为根据格式定义并启动动画
    RvView.AnimationMode := rvaniOnFormat;
    RvView.StartAnimation;

    RichViewAddPicture(RvView, 'Face1', LStream, True);
    //RichView必须格式化才能显示
    RvView.Format;
  finally
    LStream.Free;
  end;
end;

procedure TFormMain.BtnEditAddTextClick(Sender: TObject);
var
  LNumStr: string;
begin
  LNumStr := IntToStr(RandomRange(5000, 500000));

  // 注意:插入和增加有区别,需要使用不同代码
  // 如果要插入文本请参考下面代码

  //将当前文本样式设置成随机值,段落样式设置成第1个
  //RvEdit.ApplyTextStyle(LTextStyle);
  //RvEdit.ApplyParaStyle(0);

  //插入文本,然后加入一个换行符
  //RvEdit.InsertTextW(LNumStr);
  //RvEdit.InsertTextW(#13);

  // 在后边增加文本用如下代码
  RichViewAddTextEx(RvEdit, LNumStr, '宋体', 20, clRed, [fsBold, fsUnderline],
    True, -1, Random(9999));
  RvEdit.AddTextNLA(#13, 0, -1, 0);

  // 只有在ReadOnly为True时才显示链接
  RvEdit.ReadOnly := True;
  RvEdit.Format;
end;

procedure TFormMain.BtnViewAddTextClick(Sender: TObject);
var
  LNumStr: string;
begin
  LNumStr := IntToStr(RandomRange(5000, 500000));

  RichViewAddTextEx(RvView, LNumStr, '宋体', 20, clRed, [fsBold, fsUnderline],
    True, -1, Random(9999));
  RvView.AddTextNLA(#13, 0, -1, 0);

  //RichView增加完成后需要调用Format或者FormatTail方法才能显示
  RvView.Format;

  //如果需要RichView增加完成后自动滚动到最底部有2种方法
  // 第一种:
  //RvView.Options = RvView.Options + [rvoScrollToEnd];
  //RvView.FormatTail;

  // 第二种
  RvView.VScrollPos := RvView.VScrollMax;
end;


procedure TFormMain.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TFormMain.RvEditJump(Sender: TObject; id: Integer);
var
  LRVData: TCustomRVFormattedData;
  LItemNo: Integer;
  LTag: Integer;
  LItemText: WideString;
begin
  // 获取指定ID的文本项目的ItemNO
  RvEdit.GetJumpPointLocation(id, LRVData, LItemNo);
  // 获取Tag和项目文本
  LTag := RvEdit.GetItemTag(LItemNo);
  LItemText := RvEdit.GetItemTextW(LItemNo);
  SBarMain.SimpleText := 'Text: ' + LItemText + '; Tag: ' + IntToStr(LTag);
end;

procedure TFormMain.RvViewJump(Sender: TObject; id: Integer);
var
  LRVData: TCustomRVFormattedData;
  LItemNo: Integer;
  LTag: Integer;
  LItemText: WideString;
begin
  RvView.GetJumpPointLocation(id, LRVData, LItemNo);
  LTag := RvView.GetItemTag(LItemNo);
  LItemText := RvView.GetItemTextW(LItemNo);
  SBarMain.SimpleText := 'Text: ' + LItemText + '; Tag: ' + IntToStr(LTag);
end;

end.

TRichView_23.1_XE7_D12 & Lazarus 完整源码版 TRichView 是一种用于 Delphi C++Builder 的富文本编辑器组件,专注于文档的创建、查看打印。TRichView 23 版本进一步增强了其功能集合,在支持现代开发需求的同时保留了易用性灵活性的特点1。此版本不仅改进了许多现有的特性,还引入了一些新功能来满足更广泛的用户群体。 主要功能与特点 跨平台兼容性:TRichView 支持多种目标平台,包括 Windows、Linux macOS 等操作系统上的应用程序开发。这意味着开发者可以在不同环境中使用相同的代码基础。 丰富的格式化选项:提供全面的文字样式配置能力,例如字体大小、颜色、加粗、斜体等基本属性设置;同时还支持列表项编号、项目符号以及表格嵌套等功能。 图片其他对象的支持:允许插入图像、OLE 对象及其他多媒体素材到文档中,并能精确控制它们的位置及尺寸比例。 HTML 导入导出:具备将内容转换成 HTML 文件或将外部网页载入至编辑区域内的双向互操作机制。这对于需要在线共享或离线保存资料的情况非常有用。 邮件合并功能:通过数据库连接实现个性化批量生产信函或其他定制化报告材料的可能性大大提升工作效率。 脚本自动化接口:开放 API 接口让第三方插件或者宏命令得以执行复杂任务序列简化日常重复劳动强度。 安全性考量:针对敏感信息保护方面采取加密存储措施防止未经授权访问泄露风险发生。 可扩展架构设计:整个系统基于模块化原则构建而成因此便于未来升级维护工作开展同时也鼓励社区贡献共同完善产品生态体系。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值