delphi是否包含允许从db加载的自动滚动文本的组件,如新闻站点?
对于delphi 7应用程序来说,需要垂直滚动。
答案 0 :(得分:31)
对于这么简单的任务,您不需要购买商业组件!您需要做的就是向该备忘录控件发送EM_LINESCROLL消息,使其滚动到最后一行:
procedure ScrollToLastLine(Memo: TMemo);
begin
SendMessage(Memo.Handle, EM_LINESCROLL, 0,Memo.Lines.Count);
end;
如果您的备忘录对用户是只读的并且由应用程序自动更新,您可以在其OnChange事件处理程序中调用上述过程,这样每当备忘录中的文本发生更改时,它就会自动向下滚动到最后一行。
答案 1 :(得分:6)
在RichEdit备忘录中,这些滚动解决方案都没有为我工作。使用Delphi 2010 + w7。 但这个完美无缺:
每次Lines.Add('...')
之后:
SendMessage(RichEditMemo.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
发现于: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_10120212.html
答案 2 :(得分:5)
可能为了节省一些钱,你可以调整它以滚动DBMemo:
EchoMemo.Lines.Add('A Line of text or more');
EchoMemo.SelStart := EchoMemo.GetTextLen;
EchoMemo.SelLength := 0;
EchoMemo.ScrollBy(0, EchoMemo.Lines.Count);
EchoMemo.Refresh;
我用于日志显示。
答案 3 :(得分:1)
您还可以在需要时使用Memo.GoToTextEnd;
,例如在onchange事件中。不是一个正确的自动滚动效果,但在类似的情况下可能会有用。
答案 4 :(得分:1)
在同一个应用程序中发送消息的正确做法是使用 Perform 命令,SendMessage 将其发送到 windows 流,而 perform 将其直接发送到组件。以至于他甚至不要求把手:
memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
答案 5 :(得分:0)
如果您正在使用DevExpress组件,则应使用SendMessage(cxMemo->InnerControl->Handle, EM_LINESCROLL, 0,cxMemo->Lines->Count);
。所以它应该像这样:
symfony/symfony