我試圖在RichEdit
控制使用EM_SETTEXTMODE
在Delphi 7爲什麼EM_SETTEXTMODE不起作用?
只需創建一個新的項目,添加一個TRichEdit
控制和TButton
控制和下面的代碼添加到該按鈕的點擊處理程序:
SendMessage(RichEdit1.Handle, WM_SETTEXT, 0, LPARAM(PChar('')));
Button1.Caption := IntToStr(SendMessage(RichEdit1.Handle, EM_GETTEXTMODE, 0, 0));
Button1.Caption := Button1.Caption + ' ' + IntToStr(SendMessage(RichEdit1.Handle, EM_SETTEXTMODE, TM_PLAINTEXT, 0));
Button1.Caption := Button1.Caption + ' ' + IntToStr(SendMessage(RichEdit1.Handle, EM_GETTEXTMODE, 0, 0));
按鈕的標題設置爲38 0 38
點擊按鈕後,這意味着該文本模式並沒有改變 - 它最初是38
(TM_RICHTEXT or TM_SINGLELEVELUNDO or TM_MULTICODEPAGE
),然後SETTEXTMODE
成功(0
),但即使它是ST生病38
。
RichEdit
的文本在使用EM_SETTEXTMODE
之前按文檔建議清除。
我試過用EM_SETTEXTMODE
設置不同的值,它總是保持38
。
我注意到EM_SETTEXTMODE
總是返回0
(成功),即使在調用它之前RichEdit
控件包含文本。
我試過使用RichEdit1.Perform
而不是SendMessage
- 沒有區別。
我在這個問題的各種論壇上發現了幾個線程,並沒有解決任何問題。
任何想法爲什麼這不工作?
+1對於升級建議 –
+1在項目中包含的ComCtrls.pas的本地副本中進行這些更改。 –
@whosrdaddy感謝您的回答,修復工程。幾個後續問題:1. RICHED32.DLL還暴露了哪些其他問題? 2.使用RichEdit 2.0時,可能會發生哪些其他問題(如CRLF差異)?你能指點我到哪裏我可以讀更多關於差異的地方嗎?還有一個「獎勵」問題:是否有更好的方法來應用此修復方法,而不是複製整個ComCtrls單元來修復一些功能?我雖然關於製作攔截器類,但TRichEditStrings不出現在ComCtrls的接口部分。 – jedivader