寻求一个控件,就像Memo一样可以显示文字,但是它还可以自动向下滚动,谢谢。

lingbin 2003-09-12 06:55:07
有没有这样一个控件,就像Memo一样,可以显示文字,又可以自动向下滚动,还可以设置它的滚动速度、暂停,谢谢,不一定是Memo,其它有类似的控件也行。
...全文
77 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
crii 2003-09-16
  • 打赏
  • 举报
回复

void __fastcall TActiveFormX::Memo1Change(TObject *Sender)
{
Memo1->Lines->Strings[Memo1->Lines->Count - 1 ]
= Memo1->Lines->Strings[Memo1->Lines->Count - 1 ]; // + " ";

}
会导致程序退出,郁闷~

可以考虑把要显示的东西都放入 ScroolBox 中,用 ScroolBox Smooth 模式滚动。
lingbin 2003-09-16
  • 打赏
  • 举报
回复
to libran:
我今天一直都在线,我的MSN:lingbin2004@hotmail.com,可以用MSN联系,还有QQ:79323527
Libran 2003-09-15
  • 打赏
  • 举报
回复
嗯?我理解错了?
:(
你什么时候在线,通知我一声,我把我做的程序传给你,看看哪里不对
crii 2003-09-15
  • 打赏
  • 举报
回复
1、如果只对memo进行add操作,其内容基本上一直显示最后内容的,可以不用多加控制,只是太长的时候clear一下就行了(不然内存就不够辣)。

2、其实memo显示的内容时最后更新的位置,如果执行了 Del(0),就自然跳到line 1啦;同理,执行了 add("")就跳到 last line;

3、可以试试:

void __fastcall TActiveFormX::Memo1Change(TObject *Sender)
{
Memo1->Lines->Strings[Memo1->Lines->Count - 1 ];
= Memo1->Lines->Strings[Memo1->Lines->Count - 1 ] + " ";

}

4、如果memo只显示最后n行,可以禁止scrollBar,然后在memo on change 中判断行数,超过n时删除第1行的内容。这个方法最快,也不会导致内存不足。
lingbin 2003-09-15
  • 打赏
  • 举报
回复
to duduwolf:
那样的话,滚动条就没有了,我现在是想做的是,可以平滑滚动、可以用滚动条来拖动、可以暂停、可以设置它向上滚动的速度。
duduwolf 2003-09-15
  • 打赏
  • 举报
回复
你把memo的滚动条隐藏起来,然后自己计算文字在memo的行数,重新设定memo的高就行了,然后用timer进行如下控制:
if nScroll_GongGao = 1 then begin
RichEdit1.Top:= RichEdit1.Top - nGongGaoStep;
if RichEdit1.Top + RichEdit1.Height < 0 then
RichEdit1.Top:= Panel2.Height;
end;
nScroll_GongGao是一个richedit是否滚动的标示变量,等于1就滚动,非1就不滚动
nGongGaoStep是一个int型的滚动步长变量
duduwolf 2003-09-15
  • 打赏
  • 举报
回复
你可以考虑让整个memo1都移动通过timer,我以前做过,类似网站上的公告栏,效果还可以的
lingbin 2003-09-15
  • 打赏
  • 举报
回复
to libran:
看来你是理解错我的意思了,我说的是平滑滚动,不只是单纯的滚动,就像每一部电视结束的时候不是有显示演员、导演等等,那个字幕就是向上的慢慢的平滑滚动了。
lingbin 2003-09-13
  • 打赏
  • 举报
回复
to libran:
你这样也是一行一行的滚动啊,并没有平滑的滚动。
Libran 2003-09-13
  • 打赏
  • 举报
回复
用Memo的话,平滑滚动的效果不好;用RichEdit吧,简单些,效果也好
把Memo1改成RichEdit1,然后还是在Timer的OnTimer事件里写:
SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
GetScrollInfo(RichEdit1->Handle, SB_VERT, &si);
if (si.nPos < si.nMax - si.nPage + 1)
{
si.nPos++;
RichEdit1->Perform(WM_VSCROLL, SB_THUMBPOSITION + (si.nPos<<16), 0);
}
else
Timer1->Enabled = false;
sailer_shi 2003-09-13
  • 打赏
  • 举报
回复
你是不是要做类似于触摸屏的软件?

你还是用Timer来控制向下滚动吧
sooven 2003-09-13
  • 打赏
  • 举报
回复
用浏览器控件。写一个html,让html自动下滚。非常平滑 好象是TCppwebbrowser.
echocheng 2003-09-13
  • 打赏
  • 举报
回复
是不是RichEdit的ScrollBars属性应该先设为ssVertical(如果为ssNone就没有想要的效果)
不知道我说的对不对?
Libran 2003-09-13
  • 打赏
  • 举报
回复
我试了下,是可以的啊
你怎么搞的,怎么会不行呀?
把不必要的代码都去了试试:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
SCROLLINFO si;
si.cbSize = sizeof(si);
si.fMask = SIF_POS;
GetScrollInfo(RichEdit1->Handle, SB_VERT, &si);
si.nPos++;
RichEdit1->Perform(WM_VSCROLL, SB_THUMBPOSITION + (si.nPos<<16), 0);
}
fathappy 2003-09-13
  • 打赏
  • 举报
回复
以前曾经在杂志上看到过,不过是用vb做的,他用了两个picturebox控件.一个用于显示,一个用于拷屏,具体的记不太清了,实现了平滑滚动.就象那个比较出名的读书软件的那样.
(是在<<电脑爱好者>>上的,楼主可以查查,也许会有帮助)
lingbin 2003-09-13
  • 打赏
  • 举报
回复
还有用你这种方法有一个缺点,那就是当我拖动滚动条时,不能从我拖到的当前位置滚动,它还是会跑到拖动前的位置继续向上滚动。
lingbin 2003-09-13
  • 打赏
  • 举报
回复
改了,我现在用的就是RichEdit控件啦。
Libran 2003-09-13
  • 打赏
  • 举报
回复
怎么可能,你把Memo1改成RichEdit1了吗?
supwjhuLoveCjj 2003-09-12
  • 打赏
  • 举报
回复
像 lingbin(林斌) 一样向Libran() 学习
lingbin 2003-09-12
  • 打赏
  • 举报
回复
to libran:
能不能做到平滑的滚动啊,就是一次可以不滚动一行,一行一行的滚动这样效果不是很好,好像有种停顿的感觉。
加载更多回复(4)

13,822

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧