2

Delphi 7 TRichEdit コンポーネントを使用して、RTF データが msword ドキュメントからコピー アンド ペーストによってインポートされますが、データがボックスに含まれている場合、正しく表示されません。

ここに画像の説明を入力

手伝ってください

4

2 に答える 2

3

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.
于 2012-05-08T13:44:14.437 に答える
2

最終的には動作するようになりました。

Riched20.dll (最新バージョン) をアプリケーション フォルダーに追加するだけの簡単な作業でした。

于 2012-05-10T11:39:11.280 に答える