zoukankan      html  css  js  c++  java
  • 让Delphi的TRichEdit支持新标准

    先说明, 不是直接让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.
  • 相关阅读:
    将iso镜像转换为docker镜像
    Linux awk使用方法~~整理
    Linux sed使用方法
    Linux 环境变量梳理
    学习docker——命令总结
    Golang 字符串操作--使用strings、strconv包
    WebSocket实现一个聊天室
    学习WebSocket
    PHP面试题整理
    php使用gd库输出中文内容的图片
  • 原文地址:https://www.cnblogs.com/lzl_17948876/p/9444171.html
Copyright © 2011-2022 走看看