Страница 1 из 1

автоматически прокручивающийся текст

Добавлено: 07 ноя 2006, 17:21
pool
есть достаточно большой текст, надо сделать, чтобы шел автоматический скролл вниз до конца, и чтобы так шло по кругу, т.е. если текст закончился, то снова идет скролл с самого начала.

типа как в qip'e в разделе About Qip

подскажите, пожалуйста, как такое реализовать

Добавлено: 07 ноя 2006, 17:43
Duncon
А где текст должен прокручиваться?

Добавлено: 07 ноя 2006, 17:52
pool
где угодно.. например в tmemo
ну это вообще не играет никакой роли, главное - чтобы работало)

Добавлено: 07 ноя 2006, 22:25
Duncon

Код: Выделить всё

var
  ScrollMessage: TWMVScroll;
begin
  ScrollMessage.Msg := WM_VScroll;
  for i := Memo1.Lines.Count DownTo 0 do
  begin
    ScrollMessage.ScrollCode := sb_LineUp;
    ScrollMessage.Pos := 0;
    Memo1.Dispatch(ScrollMessage);
  end;
end;
Думаю что куда дальше сам разберешся...

Добавлено: 11 ноя 2006, 20:25
pool
что-то не работает

Добавлено: 13 ноя 2006, 14:12
Duncon
Я не телепат покажи код, и учти этот пример прокручивает вверх ( sb_LineUp; )

Добавлено: 15 ноя 2006, 02:52
Хыиуду
Можно взять две числовые переменные: startrow и rowscount. Первая - номер первой отображаемой строки, а вторая - количество одновременно отображаемых строк

Код: Выделить всё

repeat
for i:=0 to rowscount-1 do
 {какая-то процедура вывода строки, в зависимости от того, на что выводится, например, Memo1.Lines.Add или Form1.Canvas.Textout, ну допустим} Memo1.Lines.Add(MyText.Strings[(startrow+i) mod MyText.Strings.Count];
 sleep(1000);//или другая процедура задержки, или повесить это все на OnTimer
 startrow:=(startrow+1) mod MyText.Strings.Count;
//Или (прокрутка в другую сторону)
 startrow:=(startrow-1+MyText.Strings.Count) mod MyText.Strings.Count;
{Потом очищаем пространство для написания (канвас формы, мемо или еще что-нибудь, допустим}
Memo1.Lines.Clear;
until {пока не надоест, а если никогда не надоест, то } false;