怎样让TRichEdit随着内容的增多而自动滚动?
要求:
1. 在给RichEdit添加新的内容后,滚动条要保持在最底端(即始终显示最新的内容)。
2. 操作过程中不能转移输入焦点
3. 要能在Win98环境下实现。
以前也问过,得到以下两种方法,但在Win98下都不行。
<1> 这种方法在 RichEdit1 不拥有输入焦点时无效
SendMessage(RichEdit1.Handle, WM_KEYDOWN, VK_LCONTROL + VK_END, -1);
SendMessage(RichEdit1.Handle, WM_KEYUP, VK_LCONTROL + VK_END, -1);
<2> 这种方法在98下无法正常显示更新的内容
SendMessage(RichEdit1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
希望各位VCL设计师(同时肯定也是API高手)不吝赐教!谢谢!
问题点数:100、回复次数:4Top
1 楼gxgyj(杰克逊)回复于 2005-02-22 12:49:17 得分 0
form1.RichEdit1.Lines.Add(edit1.Text);
form1.RichEdit1.Perform(wm_vscroll,sb_bottoM,0)Top
2 楼gxgyj(杰克逊)回复于 2005-02-22 12:58:28 得分 100
procedure TForm1.Button1Click(Sender: TObject);
begin
form1.RichEdit1.Lines.Add(edit1.Text);
form1.RichEdit1.Perform(WM_VSCROLL,SB_LINEDOWN,0)
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
form1.RichEdit1.Lines.Add(edit1.Text);
form1.RichEdit1.Perform(WM_VSCROLL,SB_BOTTOM,0)
end;
//随便用哪个都行....用第一个效果好看一些...98没试过..Top
3 楼DDGG(叮叮当当)回复于 2005-02-22 13:14:54 得分 0
谢谢!我先去试试。Top
4 楼DDGG(叮叮当当)回复于 2005-02-22 14:15:35 得分 0
form1.RichEdit1.Perform(WM_VSCROLL,SB_BOTTOM,0)
和
SendMessage(RichEdit1.Handle, WM_VSCROLL, SB_BOTTOM, 0);
是一样的,不但在98下无法正常显示更新的内容,而且在Win2000/XP下刷新时也会抖动。
form1.RichEdit1.Perform(WM_VSCROLL,SB_LINEDOWN,0)
真好!谢谢杰克·逊!!Top




