Delphi 中的自动滚动备忘录

ocebsuys  于 2022-11-04  发布在  其他
关注(0)|答案(7)|浏览(178)

Delphi 是否包含一个允许自动滚动从数据库加载的文本的组件,就像新闻网站一样?
这是一个 Delphi 应用程序,需要一个垂直滚动。

fkvaft9z

fkvaft9z1#

对于这样一个简单的任务,您不需要购买商业组件!您所需要做的就是向该备忘录控件发送一个EM_LINESCROLL消息,使其滚动到最后一行:

procedure ScrollToLastLine(Memo: TMemo);
begin
  SendMessage(Memo.Handle, EM_LINESCROLL, 0,Memo.Lines.Count);
end;

如果备忘录对用户是只读的,并且由应用程序自动更新,则可以在其OnChange事件处理程序中调用上述过程,以便每当备忘录中的文本发生更改时,它都会自动向下滚动到最后一行。

oaxa6hgo

oaxa6hgo2#

在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

disbfnqx

disbfnqx3#

为了保存成本,您可能需要将其修改为滚动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;

用于日志显示。

1sbrub3j

1sbrub3j4#

你也可以在需要的时候使用Memo.GoToTextEnd;,例如在onchange事件中。这不是一个合适的自动滚动效果,但是在类似的情况下会很有用。

8wigbo56

8wigbo565#

在同一个应用程序中发送消息的正确方法是使用Perform命令,SendMessage将其发送到Windows流,而perform将其直接发送到组件,以至于他甚至不需要请求句柄:
memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);

njthzxwz

njthzxwz6#

如果您使用DevExpress组件,则应使用InnerControl->Handle。因此,它应如下所示:

SendMessage(cxMemo->InnerControl->Handle, EM_LINESCROLL, 0,cxMemo->Lines->Count);
lrpiutwd

lrpiutwd7#

更一般地说,关于需要滚动一个TControl(可以是一个TMemo)到一个特定的位置,这里是官方的RAD Studio / Delphi 文档,作为TControl.Perform的使用示例
=〉使用Perform(EM_SCROLLCARET, 0, 0)方法

相关问题