如何让richedit平滑地自动上滚?(100分)

  • 主题发起人 主题发起人 limin_chen
  • 开始时间 开始时间
L

limin_chen

Unregistered / Unconfirmed
GUEST, unregistred user!
绝非简单的 richedit1.Perform(wm_vscroll,sb_linedown,0)
因为这样是让它一行一行地滚,加入定时事件后,闪的一塌糊涂!
另:高精度的多媒体时钟怎么实现?
 
richedit1.scrollby(0,3);
计时器在论坛里搜索一下就能找到
urus在大富翁练功场上有一个精密计时的控件
 
用计时器和scrollby方法,第一个参数是X轴的象素值,第二个参数是Y轴的象素值,正值向右向下卷动,负值向上向左卷动。Delphi的帮助里都有,好好看看。
 
scrollby不对,它只能滚动当前
richedit控件中的可视内容,效果
还不如我的perform(...)呢!
 
RichEdit.Perform(WM_SETREDRAW,Intger(False),0);
RichEdit.SetStart(Length(RichEdit.Lines.Text);
RichEdit.SelLength:=0;
RichEdit.SelText:='..............'#13;
RichEdit.PerForm(EM_ScrollCaret,0,0);
RichEdit.Perform(WM_SETREDRAW,Integer(True),0);
RichEdit.Invalidate;
 
沈前卫:
哪来的setstart(int)?
RichEdit.Perform(WM_SETREDRAW,Intger(False),0);
是什么意思?

 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
memo1.Perform(EM_Scroll, SB_LineDown, 0);
end;

end.
{
Win32 API:
----------------------------
EM_Scroll:
wParam = (WPARAM) (INT) nScroll;
lParam = 0;
wParam取值及含义:
SB_LineDown:下滚一行
SB_LineUp:上滚一行
SB_PageDown:下翻一页
SB_PageUp:上翻一页
----------------------------
EM_ScrollCaret:
将光标所在位置滚动到可见区域
wParam = 0;
lParam = 0;
先用EM_SetSel消息或SetSel方法设置光标位置

}
 
uses mmsystem;

TimerProc=procedure(uID:UINT; uMsg:UINT; dwUser:DWORD;dw1:DWORD;
dw2:DWORD);stdcall;
procedure TimerCallBack(uID:UINT; uMsg:UINT; dwUser:DWORD;dw1:DWORD;
dw2:DWORD);stdcall;
begin
//进行处理
end;


var
lpTimeProc:Timerproc;

begin
lpTimeProc:=TimerCallBack;
Ft:=TimeSetEvent(1000,1000,@lpTimeProc,DWord(self),Time_Periodic);
end;
 
limin_chen:
RichEdit.Perform(WM_SETREDRAW,Intger(False),0);
RichEdit.SetStart:=Length(RichEdit.Lines.Text);
RichEdit.SelLength:=0;
RichEdit.SelText:='..............'#13;
RichEdit.SelText:='..............'#13;
{....}
RichEdit.PerForm(EM_ScrollCaret,0,0);
RichEdit.Perform(WM_SETREDRAW,Integer(True),0);
RichEdit.Invalidate;

用此方法可以是显示速度提高8-10倍(添加1000行),如果添假行数越多,效果
越明显!
RichEdit.Perform(WM_SETREDRAW,Integer(True),0) //当RichEdit 变化时,显示将更新!
RichEdit.Perform(WM_SETREDRAW,Integer(False),0) //当RichEdit 变化时,显示将不更新!

 
沈前卫,看来你对问题理解有误,richeditbox中
已有内容,让它自动上滚,下滚而已.
 
这个问题只能靠重写控件来解决了。
 
To limin_chen:
Sorry,确实对问题理解有误! {B-(

BTW:
Timer1.interval=???
 
接受答案了.
 
后退
顶部