Rolar o TMemo para primeira linha
06/02/2006
0
Obs.: Eu até consegui fazer de outra forma que ínclusive ficou melhor. Eu fui adicionando os dados em uma TStringList e depois fiz Memo.Lines.AddStrings(Variavel_StringList). Dessa forma funcionou, mas eu queria saber de qualquer maneira se dá para fazer do outro jeito.
Grato.
Delphi32
Post mais votado
06/02/2006
Adaptei a função a seguir do site [url=http://delphi.about.com]About Delphi[/url]:
procedure ScrollMemo(Memo: TMemo; Direction: Integer); var ScrollMessage: TWMVScroll; I: Integer; begin ScrollMessage.Msg := WM_VSCROLL; Memo.Lines.BeginUpdate; try for I := 0 to Memo.Lines.Count do begin ScrollMessage.ScrollCode := Direction; ScrollMessage.Pos := 0; Memo.Dispatch(ScrollMessage); end; finally Memo.Lines.EndUpdate; end; end; ... ScrollMemo(Memo1, SB_LINEUP); // Rola para o início ScrollMemo(Memo1, SB_LINEDOWN); // Rola para o final
Note o seguinte: se vc quiser, pode chamar [b:0e9bee2114]BeginUpdate [/b:0e9bee2114]antes de inserir a linha, e [b:0e9bee2114]EndUpdate [/b:0e9bee2114]após. Isso não irá rolar o memo para baixo, e consequentemente não será necessário rolá-lo para cima depois.
[]´s
Michael
Mais Posts
05/01/2016
Bruno
procedure TForm1.ScrollMemo(Direction: Integer); var ScrollMessage: TWMVScroll; i, j: integer; begin for i := 0 to Form1.ComponentCount - 1 do begin if Form1.Components[i] is TMemo then begin with (Form1.Components[i] as TMemo) do begin ScrollMessage.Msg := WM_VSCROLL; Lines.BeginUpdate; try for j := 0 to Lines.Count do begin ScrollMessage.ScrollCode := Direction; ScrollMessage.Pos := 0; Dispatch(ScrollMessage); end; finally Lines.EndUpdate; end; end; end; end; end; ... ScrollMemo(SB_LINEUP); // Rola para o início ScrollMemo(SB_LINEDOWN); // Rola para o final
09/08/2022
Bernelio
Memo1.lines[0];
O CORRETO É
SendMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
att.
Bernélio
12/02/2024
Gilberto
{ Mantém pressionada "CTRL" }
Keybd_Event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
{ Pressiona "HOME" }
Keybd_Event(VK_HOME, 0, 0, 0);
{ Libera (solta) "CTRL" }
Keybd_Event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Editado agora por Gavel
12/02/2024
Gilberto
Obs.: Eu até consegui fazer de outra forma que ínclusive ficou melhor. Eu fui adicionando os dados em uma TStringList e depois fiz Memo.Lines.AddStrings(Variavel_StringList). Dessa forma funcionou, mas eu queria saber de qualquer maneira se dá para fazer do outro jeito.
Grato.
{ Mantém pressionada "CTRL" }
Keybd_Event(VK_CONTROL, 0, KEYEVENTF_EXTENDEDKEY or 0, 0);
{ Pressiona "HOME" }
Keybd_Event(VK_HOME, 0, 0, 0);
{ Libera (solta) "CTRL" }
Keybd_Event(VK_CONTROL, $45, KEYEVENTF_EXTENDEDKEY or KEYEVENTF_KEYUP, 0);
Clique aqui para fazer login e interagir na Comunidade :)