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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
pool
Сообщения: 5
Зарегистрирован: 07 ноя 2006, 17:17

есть достаточно большой текст, надо сделать, чтобы шел автоматический скролл вниз до конца, и чтобы так шло по кругу, т.е. если текст закончился, то снова идет скролл с самого начала.

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

подскажите, пожалуйста, как такое реализовать
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

А где текст должен прокручиваться?
pool
Сообщения: 5
Зарегистрирован: 07 ноя 2006, 17:17

где угодно.. например в tmemo
ну это вообще не играет никакой роли, главное - чтобы работало)
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

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

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;
Думаю что куда дальше сам разберешся...
pool
Сообщения: 5
Зарегистрирован: 07 ноя 2006, 17:17

что-то не работает
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

Я не телепат покажи код, и учти этот пример прокручивает вверх ( sb_LineUp; )
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Можно взять две числовые переменные: 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;
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Ответить