怎么样使RichEdit自动滚屏?
不断用 RichEdit1->Lines->Add(); 向RichEdit添加文字,怎么样让RichEdit自动滚屏,不用手动滚动垂直滚动条,使最后添加的文字显示出来? 问题点数:100、回复次数:15Top
1 楼advanced(超越)回复于 2002-08-24 11:43:29 得分 0
本来就可以自动显示出来呀。我刚试过,吧RichEdit的ScrollBar设为ssVertical。就可以了。Top
2 楼kingcaiyao(aking)回复于 2002-08-24 12:02:59 得分 0
你设置ScrollBar属性为ssVertical,那么RichEdit始终显示的就是最后添加的文字,比如说:
void __fastcall TForm1::MyButton1Click(TObject *Sender)
{
for(int i=0;i<1000;i++)
{
RichEdit1->Lines->Add("YourString"+IntToStr(i));
}
}
最后添加的文字"YourString999"就可以显示出来。
Top
3 楼zhuJIM(笨笨)回复于 2002-08-24 12:12:41 得分 0
好像有问题,我第一次试的时候,像上面两位说的那样,直接就可以显示最后的文字;本着认真负责的态度,我重新新建一个工程,再试一次就不行了,始终显示的是第一行,我想贴主遇到的就是这个问题,我正在努力中……Top
4 楼kingcaiyao(aking)回复于 2002-08-24 13:34:25 得分 0
To 楼上:
如果出现你所说的情况,在你添加完字符串后,再加上一行:
::PostMessage(YourForm->Handle,WM_VSCROLL,SB_BOTTOM,RichEdit1->Handle);
Top
5 楼kingcaiyao(aking)回复于 2002-08-24 13:37:27 得分 0
即是说这样写:
void __fastcall TForm1::MyButton1Click(TObject *Sender)
{
for(int i=0;i<1000;i++)
{
RichEdit1->Lines->Add("YourString"+IntToStr(i));
}
}
::PostMessage(YourForm->Handle,WM_VSCROLL,SB_BOTTOM,RichEdit1->Handle);
Top
6 楼kingcaiyao(aking)回复于 2002-08-24 14:01:22 得分 30
上面的写错了一句,应该是:
::PostMessage(RichEdit1->Handle,WM_VSCROLL,SB_BOTTOM,0);
Top
7 楼daluobo(小箭)回复于 2002-08-24 15:44:42 得分 0
为什么不用listbox这个控件那,这个可以实现自动滚屏的
for(int n=0; n<2048; n++) {
AnsiString str = AnsiString("Item ") + n;
ListBox1->TopIndex = ListBox1->Items->Add(str);
}
不知这样实现的功能是不是一样Top
8 楼zhuJIM(笨笨)回复于 2002-08-24 15:47:07 得分 0
To: kingcaiyao(AKing)
非常感谢,我的问题解决了,我想贴主的问题也应该解决了吧?
————————————————————————————————-
星级老将就是厉害Top
9 楼starwalker(飞)回复于 2002-08-24 15:49:51 得分 0
不行啊!
楼上的,那也滚得太后了吧!
都滚到文字的后面了!Top
10 楼starwalker(飞)回复于 2002-08-24 16:30:09 得分 0
顶~~Top
11 楼zhuJIM(笨笨)回复于 2002-08-24 17:25:32 得分 0
关于贴主的问题,我又琢磨了很久,没有想出办法,其实在RichEdit的最后一行,又一个回车,如果能想办法将这个回车符删除,就可以了Top
12 楼kingcaiyao(aking)回复于 2002-08-24 18:10:41 得分 35
如果你不想将滚动条移到后,你可以这样:
WM_VSCROLL消息有以下参数可供选用:
SB_BOTTOM Scrolls to the lower right.
SB_ENDSCROLL Ends scroll.
SB_LINEDOWN Scrolls one line down.
SB_LINEUP Scrolls one line up.
SB_PAGEDOWN Scrolls one page down.
SB_PAGEUP Scrolls one page up.
SB_THUMBPOSITION Scrolls to the absolute position. The current position is specified by the nPos parameter.
SB_THUMBTRACK Drags scroll box to the specified position. The current position is specified by the nPos parameter.
SB_TOP Scrolls to the upper left.
Pos
Value of the high-order word of wParam. Specifies the current position of the scroll box if the nScrollCode parameter is SB_THUMBPOSITION or SB_THUMBTRACK; otherwise, nPos is not used.
Top
13 楼dejoy(燕青)回复于 2002-08-24 22:00:27 得分 35
with MainFrm.RichEdit1 do
begin
SelStart := Length(Text);
Perform(EM_SCROLLCARET, 0, 0);
end;
Top
14 楼starwalker(飞)回复于 2002-08-24 22:55:16 得分 0
由于其他条件限制,只能用RichEdit
现在的问题是:
::PostMessage(RichEdit1->Handle,WM_VSCROLL,SB_BOTTOM,0);
滚得太后了,都滚到文字的后面了!Top
15 楼starwalker(飞)回复于 2002-08-24 23:10:07 得分 0
解决了
受 kingcaiyao(AKing) 和 dejoy(燕青) 的启发,用如下代码可以解决:
::PostMessage(RichEdit1->Handle,EM_SCROLLCARET,SB_BOTTOM,0);
只是最后有个回车:<
好了,再看看有没有可以解决回车的贴,3天内给分。
ps:怎么不能给自己加分??Top




