Fórum Rolar o TMemo para primeira linha #311919
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
Curtir tópico
+ 0Post 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
Gostei + 1
Mais Posts
06/02/2006
Edilcimar
Memo1.SelStart := 0;
Gostei + 0
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
Gostei + 1
05/01/2016
Raimundo Pereira
Memo1.lines[0];
Gostei + 0
09/08/2022
Bernelio
Memo1.lines[0];
O CORRETO É
SendMessage(Memo1.Handle, WM_VSCROLL, SB_PAGEUP, 0);
att.
Bernélio
Gostei + 0
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
Gostei + 0
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);
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)