2012-05-08 41 views
2

使用delphi 7 TRichEdit組件,通過複製粘貼從msword文檔導入RTF數據,但是如果數據包含在一個框中,則它不能正確顯示,即Delphi 7 TRichTextEdit文本框中顯示不正確

enter image description here

請協助

+0

那樣簡單,它顯示正確? –

+0

是的,它看起來不錯,但使用RX和Delphi的RTF編輯器,佈局會發生變化。 – KE50

+2

這需要對VCL使用的richedit控件的版本進行一些操作。我確信有人會記得這些細節.. –

回答

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. 
+1

IIRC的RxRichEdit已經使用RICHED20.DLL。如果它沒有正確顯示這個框,那麼OP應該可能瞄準'RICHEDIT50W'(或者如果它有一個Ansi對應的話,可能是'RICHEDIT50A'),正如你在問題的評論中提到的那樣。 –

+0

@Sertac,已經有5.0版本了?從來沒有注意到(我不是一個高級的編輯用戶,我只對2.0感到滿意:-)我真的失去了Delphi 7中的一些概述(我在考慮v.1.0)。 – TLama

+0

添加TRichEdit組件後,它會顯示'RichEdit Line Insertion'錯誤 – KE50

2

終於得到它的工作,

如果你把它粘貼到寫字板這是因爲添加的Riched20.dll(最新版​​本)的應用程序文件夾