首页 > 其他分享 >让Delphi的TRichEdit支持新标准

让Delphi的TRichEdit支持新标准

时间:2022-10-03 23:00:18浏览次数:60  
标签:begin end RICHEDIT Delphi V41 标准 TRichEdit TRichEdit41 procedure

先说明, 不是直接让TRichedit支持, 而是派生出一个类支持

原理就是, IDE自带的richedit使用的是2.0版本(RICHEDIT20A/RICHEDIT20W), 这个版本虽然支持图片/表格显示, 但是似乎不支持从RTF文件中加载(我也不知道为什么, 总之表现出来就是不支持)

所以, 支持新标准的思路就是, 派生一个子类, 在CreateParams时使用新标准去定义它

这里我使用的是richedit4.1标准(RICHEDIT50W), 这个标准是依赖于MSFTEDIT.DLL这个文件, 系统自带, 从XP-SP1开始支持, 所以如果你的程序是在XP-SP1以下的版本运行就不要考虑了

没别的, 直接贴源码

复制代码
unit RichEdit41;

interface

uses
  Winapi.Windows,
  Vcl.ComCtrls, Vcl.Controls;

const
  RICHEDIT_V41_CLASSNAME = 'RICHEDIT50W';
  RICHEDIT_V41_MODULENAME = 'MSFTEDIT.DLL';

type
  [RootDesignerSerializerAttribute('', '', False)]
  [ComponentPlatformsAttribute(pidWin32 or pidWin64)]
  TRichEdit41 = class(TRichEdit)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

procedure Register;

implementation

uses
  System.Classes;

var
  FRichEdit41LabHandle: HMODULE;

{ TRichEdit41 }

procedure TRichEdit41.CreateParams(var Params: TCreateParams);
begin
  inherited;
  CreateSubClass(Params, RICHEDIT_V41_CLASSNAME);
end;

procedure Register;
begin
  RegisterComponents('Others', [TRichEdit41]);
end;

initialization
begin
  FRichEdit41LabHandle := LoadLibrary(RICHEDIT_V41_MODULENAME);
end;

finalization
begin
  FreeLibrary(FRichEdit41LabHandle);
end;

end.
复制代码  

转自: https://www.cnblogs.com/lzl_17948876/p/9444171.html

标签:begin,end,RICHEDIT,Delphi,V41,标准,TRichEdit,TRichEdit41,procedure
From: https://www.cnblogs.com/tang-delphi/p/16751525.html

相关文章

  • Delphi as 和 is 的使用
    as就是把某个类型对象转换为某个指定类型,这样方便使用指定类型中的一些成员.is就是判断某个对象是不是某个类型,可以筛选出我们需要的对象.unitUnit1;interfaceuse......
  • 学习记录13标准的JavaBean类
    标准的JavaBean类类名需要见名知意成员变量使用private修饰提供至少两个构造方法无参构造方法带全部参数的构造方法成员方法提供每一个成员变量对应的setXxx()......
  • 第四篇-标准命令概述
    标准命令概述Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。build:用于编译给......
  • 为标准操作POP2添加change document
    货铺QQ群号:834508274群里有人问相关问题,看群友回答,有点眼熟,但是自己想不起来了,然后翻看了记录才找到。这里再发一遍,嗯,温故而知新。用户提出个需求,在POP2的时候,发现没记录是......
  • Python基础(九) | time random collections itertools标准库详解
    ⭐本专栏旨在对Python的基础语法进行详解,精炼地总结语法中的重点,详解难点,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握python编程,同时为后续的数据分析,机器学习及深......
  • delphi TMS FlexCel 导出HTML设置
    TMSFlexCel导出HTML设置属性和方法TFlexCelHtmlExport.HtmlVersionpropertyHtmlVersion:THtmlVersion生成的HTML版本。THtmlVersion定义导出时将使用的HTML......
  • Delphi XE MessageDialog- 显示包含自定义消息、对话框类型、按钮集和帮助上下文ID的
    DelphiXEMessageDialog-显示包含自定义消息、对话框类型、按钮集和帮助上下文ID的对话框。-可以同步或异步工作classprocedureMessageDialog(constAMessage:......
  • Delphi XE MessageDialogAsync 和 MessageDialogSync [1] - 显示包含自定义消息、对话
    DelphiXEMessageDialogAsync和MessageDialogSync-显示包含自定义消息、对话框类型、按钮集和帮助上下文ID的对话框。1、MessageDialogAsync-异步工作,调用立即完成......
  • Delphi XE MessageDialogAsync 和 MessageDialogSync [2] - 用法示例
    DelphiXEMessageDialogAsync和MessageDialogSync[2]-用法示例1、MessageDialogAsync//滔Roy2022.09.30usesFMX.Platform;//IFMXDialogServiceAsync......
  • 关系数据库标准语言SQL(2)数据定义
    数据定义分为四个定义:模式(SCHEMA)定义、表(TABLE)定义、视图定义、索引定义操作的方式:创建(CREATE)、删除(DROP)、修改(ALTER),在每种定义前前加上相应操作的关键字,而后加上定义关......