Preenchendo um Memo

Delphi

27/11/2003

Caros amigos

Em determinado momento um dos meus programas preenche um TMemo para fornecer algumas instruções. Até aí tudo bem.

Porém quando chega ao fim, o cursor fica em baixo, não aparecendo a parte superior do memo, a menos que o usuário leve até lá com a scroolbar ou com o botão [page Up].

Tentei emular o botão mas nada acontece. Nem ´refresh´, nem ´repaint´ conseguiram resolver.

Como faço para voltar o cursor, dentro do memo, para a primeira linha ???

Mais uma vez obrigado a todos que enviarem sugestões.

Marconi


Marconi

Marconi

Curtidas 0

Respostas

Lindomar.des

Lindomar.des

27/11/2003

Marconi,

tenta isso:

Memo1.SelStart := 0;


Lindomar Sampaio
Vila Velha-ES


GOSTEI 0
Marconi

Marconi

27/11/2003

Ok. Funcionou em parte.

O cursor foi, mas a tela ficou parada onde estava.

Obrigado pela dica.

Marconi


GOSTEI 0
Lindomar.des

Lindomar.des

27/11/2003

Marconi,

o que deve acontecer com a tela?

Lindomar Sampaio
Vila Velha-ES


GOSTEI 0
Marcelo Saviski

Marcelo Saviski

27/11/2003

talvez esse chuncho funcione:

ActiveControl := nil;
Memo.SetFocus;


GOSTEI 0
Marconi

Marconi

27/11/2003

Me espressei mal.

O cursor foi para o inicio, mas preciso ainda movimentar a scrollbar ou usar a [page-up] para mostrar o inicio do texto.

Após preencher o memo, fica aparecendo o final dele.

Marconi


GOSTEI 0
Marconi

Marconi

27/11/2003

ActiveControl := nil;
Memo.SetFocus;

Tambem não deu. Ficou na mesma.

Caramba! Nunca pensei que iria apanhar de um Memo.

Marconi


GOSTEI 0
Beppe

Beppe

27/11/2003

Acho que tem uma função, ScrollToCursor, no memo.


GOSTEI 0
Marconi

Marconi

27/11/2003

Pessoal

Ainda não consegui.

Alguem tem mais alguma idéia ???

Marconi


GOSTEI 0
Lindomar.des

Lindomar.des

27/11/2003

Marconi,

parece grotesco, mas tente isso:

memo1.SetFocus;
memo1.SelStart := 0;
memo1.Lines.Move(memo1.Lines.Count,0);
memo1.Lines.Delete(0);

talvez exista uma forma melhor...

Lindomar Sampaio
Vila Velha-ES


GOSTEI 0
Beppe

Beppe

27/11/2003

Tenta isso:
SendMessage(Memo1.Handle, EM_SCROLLCARET, 0, 0);



GOSTEI 0
Valdir.santos

Valdir.santos

27/11/2003

Tente isto:

SendMessage(memTexto.Handle, WM_VSCROLL, SB_PAGEUP, 0);

Valdir.


GOSTEI 0
Beppe

Beppe

27/11/2003

Tenta isso:
SendMessage(Memo1.Handle, EM_SCROLLCARET, 0, 0);


O código acima faz o scroll para a areá que tiver o caret, então você também precisa colocá-lo no final. O código correto:

Memo1.SelStart := Length(Memo1.Text);
SendMessage(Memo1.Handle, EM_SCROLLCARET, 0, 0);



GOSTEI 0
Marconi

Marconi

27/11/2003

Obrigado Valdir.Santos

A sua sugestão funcionou legal.

SendMessage(memTexto.Handle, WM_VSCROLL, SB_PAGEUP, 0);

Marconi


GOSTEI 0
POSTAR