程序控制richedit内容的滚动(100分)

  • 主题发起人 主题发起人 hhzh426
  • 开始时间 开始时间
H

hhzh426

Unregistered / Unconfirmed
GUEST, unregistred user!
我想在程序中控制richedit的滚动条,比如用程序模拟拖拉滚动条、
点击向上向下箭头等动作。
 
SendMessage(......) :-)
 
......是什么,我需要具体的程序代码!
 
在Form上放一TTime控件,设Time.interval:=1;
在OnTime事件中写入:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
RichEdit1.ScrollBy(0,-1);
//-1向上称,1向下移,当然你如果觉的不够快的话还可以取更大的值:)
end;
 
RichEdit1.Perform(EM_LINESCROLL, 0, 1);

EM_LINESCROLL
Edit controls: The EM_LINESCROLL message scrolls the text vertically or horizontally in a multiline edit control.
Rich edit controls: The EM_LINESCROLL message scrolls the text vertically in a multiline edit control.
EM_LINESCROLL wParam = (WPARAM) cxScroll; // characters to scroll horizontally
lParam = (LPARAM) cyScroll; // lines to scroll vertically ParameterscxScroll
Edit controls: Value of wParam. Specifies the number of characters to scroll horizontally.
Rich edit controls: This parameter is not used; it must be zero. cyScroll
Value of lParam. Specifies the number of lines to scroll vertically.
 
procedure TForm1.Button1Click(Sender: TObject);
begin
SendMessage(RichEdit1.Handle,EM_LINESCROLL, 0, 2);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
RichEdit1.Perform(EM_LINESCROLL, 0, 1);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
RichEdit1.ScrollBy(0,-1);
end;

这三个过程都可以,SendMessage和Perform的功能一样,都属于消息函数,最后的参数
表示移动的行数,只能一整行移动,而ScrollBy则不是整行移动,它移动距离比较小,
我建议你使用ScrollBy,这样做可以些程序更加细腻一些.
THANK YOU FOR READ MY ANSWER!


 
to jli
我用scrollby(0,x)试过,但好象只能滚动client区的内容,移动后在client
的下面空白部分不停的重画client区的最后一行。而且移动结束后又恢复了移动前
的状态,为什么?
谢谢xwolf和jlj,每人先给30分,如果谁能给出像素级移动的代码,剩下的分
全部给他!
 
滚动条也不是象素级的呀?

想一想。
 
类似于IE5中按下鼠标中间的滚动轮后达到的效果,那不是像素级的吗?
 
小弟多问一句,怎样才知道是否以到了文档的形状或结尾???
 
怎么没有人回答我的问题,难道这个问题很难回答,还是嫌分少?
 
确实是这样, 我还没有找到办法, 再等等吧.
看有没有其他人.
 
放人时间太长了,也没有为解答,给分了!
 
后退
顶部