【问题标题】:Delphi 7 TRichTextEdit Text in a box not displaying correctlyDelphi 7 TRichTextEdit 框中的文本无法正确显示
【发布时间】:2012-05-08 12:11:00
【问题描述】:

使用delphi 7 TRichEdit组件,通过复制和粘贴从msword文档中导入RTF数据,但如果数据包含在框内,则无法正确显示,即

请帮忙

【问题讨论】:

  • 如果你把它粘贴到写字板,它会正确显示吗?
  • 是的,它看起来不错,但使用来自 RX 和 Delphi 的 RTF 编辑器,布局会发生变化。
  • 这与 VCL 使用的 Richedit 控件的版本有关。我相信有人会记得细节..
  • 我认为 Sertac 是对的,也许您可​​以尝试升级到更新版本,例如 his blog 中描述的 François
  • SertacAkyuz 和 TLama 感谢您的及时回复,我认为这是要走的路,唯一的问题是 Francois 的修复适用于 delphi 10。

标签: delphi delphi-7 rtf trichedit


【解决方案1】:

尝试使用以下内容,它应该将TRichEdit 类子类化为4.1 版。但是我不知道 Delphi 7 是否支持插入类,所以只需尝试粘贴以下代码并尝试构建项目。
如果它编译,那么如果你放置一个 TRichEdit 组件并运行你应该得到的项目RichEdit 4.1。

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls, RichEdit;

type
  TRichEdit = class(ComCtrls.TRichEdit)
  protected
    procedure CreateParams(var Params: TCreateParams); override;
  end;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  FRichEditModule: THandle;

implementation

{$R *.dfm}

{ TRichEdit }

procedure TRichEdit.CreateParams(var Params: TCreateParams);
const
  RichEditClassName = 'RICHEDIT50A';
  RichEditModuleName = 'MSFTEDIT.DLL';
  HideScrollBarsStyle: array[Boolean] of DWORD = (ES_DISABLENOSCROLL, 0);
  HideSelectionsStyle: array[Boolean] of DWORD = (ES_NOHIDESEL, 0);
begin
  if FRichEditModule = 0 then
  begin
    FRichEditModule := LoadLibrary(RichEditModuleName);
    if FRichEditModule <= HINSTANCE_ERROR then
      FRichEditModule := 0;
  end;
  inherited CreateParams(Params);    
  CreateSubClass(Params, RichEditClassName);
  Params.Style := Params.Style or HideScrollBarsStyle[HideScrollBars] or
    HideSelectionsStyle[HideSelection];
  Params.WindowClass.style := Params.WindowClass.style and
    not (CS_HREDRAW or CS_VREDRAW);
end;

initialization

finalization
  if FRichEditModule <> 0 then
    FreeLibrary(FRichEditModule);

end.

【讨论】:

  • IIRC RxRichEdit 已经使用了 RICHED20.DLL。如果它没有正确显示该框,则 OP 可能应该瞄准“RICHEDIT50W”(或者如果它有 Ansi 对应物,则可能是“RICHEDIT50A”),正如您在对该问题的评论中提到的那样。
  • @Sertac,已经有 5.0 版了?从来没有注意到(我不是高级富编辑用户,我只是对 2.0 感到满意 :-) 而且我真的失去了对 Delphi 7 的概述(我在考虑 v.1.0)。
  • 添加 TRichEdit 组件后出现“RichEdit Line Insertion”错误
  • @TLama - 好吧,我正在阅读你提到的博客。 AFAIU 是 4.1 版本的类名。令人困惑..
  • 我确认修改后的答案在 D7 中有效。但是我无法确认它是否有帮助,因为当我将文本框从 Word 粘贴到写字板时,根本没有任何框。
【解决方案2】:

终于搞定了,

就像将 Riched20.dll(最新版​​本)添加到应用程序文件夹一样简单

【讨论】:

    猜你喜欢
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多