none
none

Reputation: 4827

autoscrolling memo in delphi

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.

Upvotes: 12

Views: 36331

Answers (8)

If you need for Fire Monkey:

After Memo1.Lines.Add (); add this line:

 Memo1.GoToTextEnd;

Upvotes: 0

Didier Cabalé
Didier Cabalé

Reputation: 419

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

Upvotes: 0

RoCkHeLuCk
RoCkHeLuCk

Reputation: 329

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);

Upvotes: 3

Piotr Piaseczny
Piotr Piaseczny

Reputation: 11

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);

Upvotes: 1

lluca
lluca

Reputation: 301

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.

Upvotes: 5

Aljaz - aly
Aljaz - aly

Reputation: 256

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

Upvotes: 7

vcldeveloper
vcldeveloper

Reputation: 7489

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.

Upvotes: 47

Despatcher
Despatcher

Reputation: 1725

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.

Upvotes: 5

Related Questions