2012-10-05 67 views
0

我寫了一個根據輸入填充RichEdit組件的過程。從外部程序填充RichEdit

procedure LoadCPData(ResName: String); 
begin 
    ResName := AnsiLowercase(ResName) + '_data'; 
    rs := TResourceStream.Create(hInstance, ResName, RT_RCDATA); 
    try 
    rs.Position := 0; 
    info.reMeta.Lines.LoadFromStream(rs); 
    finally 
    rs.Free; 
    end; 
end; 

注:上述程序是存儲在外部.pas文件調用的函數。

當我打電話給我的表單時,RichEdit保持空白。但是,如果我要將該代碼塊放在表單中,則RichEdit組件會按預期填充數據,而不會出現問題。現在我可以將上面的代碼塊放在窗體中,但我打算在case聲明中多次使用該過程。

爲了讓我的程序正常工作,我需要包括什麼?

謝謝先進!

+0

是您正在加載有效的RTF文件的外部文件?我問,因爲我加載RTF的方式與您在代碼中顯示的方式稍有不同,而且它總是適用於我 - 代碼位於單獨的單元中。 –

+0

是的,我確定它應該是一個有效的RTF文件,因爲我已經將它加載到內部。但是,你認爲有效的含義是什麼?你能分享你的代碼嗎? – ple103

+0

我會發布我所做的,儘管它與你所做的很相似......但我還是增加了一些東西。也許他們會做的伎倆。 –

回答

1

我們使用TJvRichEdit控件而不是TRichEdit,以便我們可以支持嵌入的OLE對象。這應該與TRichEdit非常類似。

procedure SetRTFData(RTFControl: TRichEdit; FileName: string); 
var 
    ms: TMemoryStream; 
begin 
    ms := TMemoryStream.Create; 
    try 
    ms.LoadFromFile(FileName); 
    ms.Position := 0; 
    RTFControl.StreamFormat := sfRichText; 
    RTFControl.Lines.LoadFromStream(ms); 
    ms.Clear; 

    RTFControl.Invalidate; 

    // Invalidate only works if the control is visible. If it is not visible, then the 
    // content won't render -- so you have to send the paint message to the control 
    // yourself. This is only needed if you want to 'save' the content after loading 
    // it, which won't work unless it has been successfully rendered at least once. 
    RTFControl.Perform(WM_PAINT, 0, 0); 
    finally 
    FreeAndNil(ms); 
    end; 
end; 

我改編了這個從另一個例程,所以它不是我們使用完全相同的方法。我們從數據庫流式傳輸內容,所以我們不會從文件中讀取數據。但是我們將字符串寫入到內存流中以將其加載到RTF控件中,所以這實際上是做同樣的事情。

+1

正如你的評論所說的,只有當控件可見時,Invalidate纔有效,並且「發送繪畫消息」的方式不是調用「WMPaint」;它可以是SendMessage或PostMessage到RTFControl.Handle或是使用RTFControl.Perform。您還可以使用'PaintMsg',它不在代碼中的任何位置定義。你發佈的一半是無效或不正確的代碼或評論。 –

+0

是的 - 我需要添加'PaintMsg'變量。剛剛看到我自己... –

+0

你的編輯有幫助,但你仍然在做錯。你不**可以直接調用'WMPaint';您可以使用PostMessage或SendMessage發佈或發送'WM_PAINT'消息到控件,或者使用'RTFControl.Perform(WM_Paint,0,0)',這是您所有的PaintMsg都會做的。這也不是解決問題的方法。 –