Does delphi contain a component that allows auto scroll text loaded from db, like in news sites?
Tt's for a delphi 7 application and requires a vertical scrolling.
Does delphi contain a component that allows auto scroll text loaded from db, like in news sites?
Tt's for a delphi 7 application and requires a vertical scrolling.
None of those solutions for scrolling worked for me in the RichEdit memo. Using Delphi 2010 + w7. But this one works perfectly:
After every Lines.Add('...')
this follows:
SendMessage(RichEditMemo.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
Found in: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_10120212.html
For such a simple task, you don't need to buy a commercial component! All you need to do is to send an EM_LINESCROLL message to that memo control, to make it scroll to the last line:
procedure ScrollToLastLine(Memo: TMemo);
begin
SendMessage(Memo.Handle, EM_LINESCROLL, 0,Memo.Lines.Count);
end;
If your memo is read-only to users and is updated automatically by the application, you can put a call to the above procedure in its OnChange event-handler, so that whenever the text inside the memo is changed, it is automatically scrolled down to the last line.
None of those solutions for scrolling worked for me in the RichEdit memo. Using Delphi 2010 + w7. But this one works perfectly:
After every Lines.Add('...')
this follows:
SendMessage(RichEditMemo.Handle, WM_VSCROLL, SB_LINEDOWN, 0);
Found in: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_10120212.html
Possibly, to save you some money you could adapt this to scroll a 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;
I use for a log display.
You can also use Memo.GoToTextEnd;
when needed, for example inside an onchange event. Is not a proper auto-scrolling effect but can be useful in similar situations.
The right thing to send messages within the same application is to use the Perform command, SendMessage sends it to the windows stream while perform sends it directly to the component. So much so that he doesn't even ask for the handle:
memo1.Perform(WM_VSCROLL, SB_LINEDOWN, 0);
SB_LINEDOWN
scrolls one line down, so you have to know how many times to call it to scroll enough. The answer with EM_LINESCROLL
scrolls to the end with just one call. –
Sanjak If you're working with DevExpress components, you should use InnerControl->Handle
. So it should look like this:
SendMessage(cxMemo->InnerControl->Handle, EM_LINESCROLL, 0,cxMemo->Lines->Count);
More generally regarding the need to scroll a TControl (can be a TMemo) to a specific position, here is what says the official RAD Studio /Delphi documentation as an example of usage of TControl.Perform
=> use the Perform(EM_SCROLLCARET, 0, 0)
method
© 2022 - 2024 — McMap. All rights reserved.
TMemo
(or similar) VCL control in reverse order. This puts the latest item on top which may remove the need to scroll at all. – Swore