1.经试验和查阅,RichEdit控件输入文本内容的时候,的确不能超过64k(录入的内容不能超过64K,或者粘贴几百k的文本,就只显示64k的内容);
2.Memo控件不存在此问题,可以直接粘贴大量文本的。
经过网上的一些搜索,发现这篇文章才比较好,http://bbs.csdn.net/topics/40066031
lResult = SendMessage(
// returns LRESULT in lResult
(HWND) hWndControl,
// handle to destination control
(UINT) EM_LIMITTEXT,
// message ID
(WPARAM) wParam,
// = (WPARAM) () wParam;
(LPARAM) lParam
// = 0; not used, must be zero
);
wParam
Rich edit controls: If this parameter is zero, the text length is set to 64,000 characters.=>说明一般是为0的,即64k字符;
Edit controls on Windows NT/2000/XP: If this parameter is zero, the text length is set to 0x7FFFFFFE characters for single-line edit controls or 1 for multiline edit controls.
lParam
This parameter is not used.=>一般没使用,设置为0即可;
所以,解决的方法就是,应用程序中的n个RichEdit在Form创建之初,就赋值:
方法一:procedure TForm1.FormCreate(Sender: TObject);
begin
SendMessage(RichEdit1.Handle,EM_LIMITTEXT,$7FFFFFFE,0);
SendMessage(RichEdit2.Handle,EM_LIMITTEXT,$7FFFFFFE,0);
end;
百度的结果一般是将wParam和lParam写反的代码,故实际是不能使用的,比如以下是错误的SendMessage(RichEdit1.Handle,EM_LIMITTEXT,0,$7FFFFFFE);
还有,另外一种方法是可用的,
方法二:SendMessage(RichEdit1.Handle,WM_USER+53,0,$7FFFFFFE);
注意上面一句,必须是WM_USER+53 , 加54之类的都是不可行的,而且注意,此处,wParam和lParam的位置和第1种方法是相反的,若2者位置交换,是不起作用的。
至于原因为何,我是不知晓的了,也不去深究的了。
总结一下:按道理Memo没有64k限制,那么我们用memo控件代替RichEdit不就行的了吗?实际测试的结果的确没问题,但就是memo粘贴速度很慢,几百k的文本粘贴进去感觉比RichEdit慢多了的。
所以,还是使用创建Form的时候解除RichEdit的64k限制来得更舒服一些的。