在delphi中自动滚动备忘录

时间:2010-12-01 09:24:17

标签: delphi delphi-7

delphi是否包含允许从db加载的自动滚动文本的组件,如新闻站点?

对于delphi 7应用程序来说,需要垂直滚动。

6 个答案:

答案 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