解决richedit的内容不能超过64k的方法

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限制来得更舒服一些的。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页