Delphi 是否包含一个允许自动滚动从数据库加载的文本的组件,就像新闻网站一样?这是一个 Delphi 应用程序,需要一个垂直滚动。
fkvaft9z1#
对于这样一个简单的任务,您不需要购买商业组件!您所需要做的就是向该备忘录控件发送一个EM_LINESCROLL消息,使其滚动到最后一行:
procedure ScrollToLastLine(Memo: TMemo); begin SendMessage(Memo.Handle, EM_LINESCROLL, 0,Memo.Lines.Count); end;
如果备忘录对用户是只读的,并且由应用程序自动更新,则可以在其OnChange事件处理程序中调用上述过程,以便每当备忘录中的文本发生更改时,它都会自动向下滚动到最后一行。
oaxa6hgo2#
在RichEdit备忘录中,没有一个滚动解决方案对我有效。使用 Delphi 2010 + w7。但这个解决方案非常有效:在每个Lines.Add('...')之后,如下所示:
Lines.Add('...')
SendMessage(RichEditMemo.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
找到位置:http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_10120212.html
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;
用于日志显示。
1sbrub3j4#
你也可以在需要的时候使用Memo.GoToTextEnd;,例如在onchange事件中。这不是一个合适的自动滚动效果,但是在类似的情况下会很有用。
Memo.GoToTextEnd;
8wigbo565#
在同一个应用程序中发送消息的正确方法是使用Perform命令,SendMessage将其发送到Windows流,而perform将其直接发送到组件,以至于他甚至不需要请求句柄:memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
njthzxwz6#
如果您使用DevExpress组件,则应使用InnerControl->Handle。因此,它应如下所示:
InnerControl->Handle
SendMessage(cxMemo->InnerControl->Handle, EM_LINESCROLL, 0,cxMemo->Lines->Count);
lrpiutwd7#
更一般地说,关于需要滚动一个TControl(可以是一个TMemo)到一个特定的位置,这里是官方的RAD Studio / Delphi 文档,作为TControl.Perform的使用示例=〉使用Perform(EM_SCROLLCARET, 0, 0)方法
Perform(EM_SCROLLCARET, 0, 0)
7条答案
按热度按时间fkvaft9z1#
对于这样一个简单的任务,您不需要购买商业组件!您所需要做的就是向该备忘录控件发送一个EM_LINESCROLL消息,使其滚动到最后一行:
如果备忘录对用户是只读的,并且由应用程序自动更新,则可以在其OnChange事件处理程序中调用上述过程,以便每当备忘录中的文本发生更改时,它都会自动向下滚动到最后一行。
oaxa6hgo2#
在RichEdit备忘录中,没有一个滚动解决方案对我有效。使用 Delphi 2010 + w7。但这个解决方案非常有效:
在每个
Lines.Add('...')
之后,如下所示:找到位置:http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_10120212.html
disbfnqx3#
为了保存成本,您可能需要将其修改为滚动DBMemo:
用于日志显示。
1sbrub3j4#
你也可以在需要的时候使用
Memo.GoToTextEnd;
,例如在onchange事件中。这不是一个合适的自动滚动效果,但是在类似的情况下会很有用。8wigbo565#
在同一个应用程序中发送消息的正确方法是使用Perform命令,SendMessage将其发送到Windows流,而perform将其直接发送到组件,以至于他甚至不需要请求句柄:
memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
njthzxwz6#
如果您使用DevExpress组件,则应使用
InnerControl->Handle
。因此,它应如下所示:lrpiutwd7#
更一般地说,关于需要滚动一个TControl(可以是一个TMemo)到一个特定的位置,这里是官方的RAD Studio / Delphi 文档,作为TControl.Perform的使用示例
=〉使用
Perform(EM_SCROLLCARET, 0, 0)
方法