Помощь - Поиск - Пользователи - Календарь
Полная версия: Вывод текста бегущей строкой
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анастасия
Вот программа, работает, но я хочу, чтобы текст , уходя за пределы экрана,
возвращался слева или появлялись друг за другом строки как по телевизору.
Не придумывается что-то.
program lll;
uses crt,graph;
var d,m,e,dx,dy,xd,yd,i,j:integer;
begin
d :=Detect;
initgraph(d, m, 'd:\bp70\bgi');
e := graphresult;
if e <> grok then
writeln(grapherrormsg(e))
else
begin
dx:=0;
dy:=200;
xd:=600;
yd:=200;
settextstyle(4,0,8);
repeat
for j:=1 to 500 do  begin
for i:=1 to 270 do begin
if dx>=0 then begin dx:=dx+1;
outtextxy(dx,dy,'Anastasiya');
end;
delay(800);
cleardevice;
end;
if keypressed then break
end;
until keypressed;
end;
end.


Пользуйтесь тегами
Романтик
а что мешает поставить один if на условие выхода за пределы(по-моему предел 640*480, если память не изменяет)?
Гость
James_Bond, а покажи-ка как и КУДА ты будешь его ставить, а то теоретически языком молоть все умеют...
klem4
Анастасия, для начала могу посоветовать вам воспользоваться поиском, бегущие строки уже реализовывались на форуме, если не поможет поиск, поможем мы smile.gif
Анастасия
Цитата(James_Bond @ 26.02.2006 20:50) *

а что мешает поставить один if на условие выхода за пределы(по-моему предел 640*480, если память не изменяет)?

я не хочу что бы мой текст ходил справа налево, а чтобы всегда только слева направо: исчезал
и слева снова появлялся(новый или тот же).
Анастасия
пока я так и не нашла ответ для графики unsure.gif
Романтик
Цитата(Анастасия @ 26.02.2006 22:05) *

я не хочу что бы мой текст ходил справа налево, а чтобы всегда только слева направо: исчезал
и слева снова появлялся(новый или тот же).

Ну например
Если координаты больше границы, тогда обнуляем счетчик и по-новой. Я бы помог, только не силен в графике.
volvo
Анастасия, попробуй запустить вот это:
program lll;
uses crt,graph;

var
  gDriver, gMode, err: integer;
  s: string;
begin
  gDriver := Detect;
  initgraph(gDriver, gMode, '');
  err := graphresult;
  if err <> grok then begin
    writeln(grapherrormsg(err));
    halt(100);
  end;

  settextstyle(4, HorizDir, 8);
  s := 'Anastasiya';
  repeat
    s := s + ' ';
  until textwidth(s) > getmaxx;
  delete(s, length(s), 1);

  repeat
    delay(1800);
    cleardevice;
    outtextxy(1, getmaxy div 2, s);
    s := copy(s, 2, length(s) - 1) + s[1];

  until keypressed;

end.


Идея ясна? wink.gif

У меня только справа налево, но направление движения меняется элементарно...
Анастасия
Цитата

Чтобы получить ответ, нужно задать правильный вопрос. Но чтобы правильно задать вопрос, нужно знать большую часть ответа...
yes2.gif
Анастасия
program lll;
uses crt,graph;
var d,m,e,dx,dy,xd,yd,i,j:integer;s:string;
begin
d :=Detect;
initgraph(d, m, '…\bgi');
e := graphresult;
if e <> grok then
writeln(grapherrormsg(e))
else
begin
dx:=0;xd:=600;yd:=200;
dy:=200;
settextstyle(4,0,8);
s:='Anastasiya ';
repeat
for j:=1 to  700 do  begin
for i:=1 to 270 do begin
if dx>=0 then begin dx:=dx+1;
outtextxy(dx,dy,s);
end;
delay(800);
cleardevice;

end;dx:=0;
end;
until keypressed;
end;
end. 

Поторопилась соглашаться. К сожалению не знаю многих функций и не могу разобраться логически как
текст в предыдущей программе может идти справа налево , а тем более как сделать это слева направо.
Придумала, то, что выложила. Упрощённый вариант моей бегущей строки. Почти ничего не изменила, так всегда. Но буду благодарна, если вы подскажете как мне пустить эту бегущую строку слева направо в предыдущей программе. Для меня это не так уж и элементарно.
volvo
Ну, например, вот так:
program lll;
uses crt,graph;

var
  gDriver, gMode, err: integer;
  s: string;
begin
  gDriver := Detect;
  initgraph(gDriver, gMode, '');
  err := graphresult;
  if err <> grok then begin
    writeln(grapherrormsg(err));
    halt(100);
  end;

  settextstyle(4, HorizDir, 8);
  s := 'Anastasiya';
  repeat
    s := s + ' ';
  until textwidth(s) > getmaxx;
  delete(s, length(s), 1);

  repeat
    delay(1800);
    cleardevice;
    outtextxy(1, getmaxy div 2, s);
    s := s[length(s)] + copy(s, 1, length(s) - 1); { Меняем ЗДЕСЬ }

  until keypressed;

end.


smile.gif

Цитата
не могу разобраться логически как текст в предыдущей программе может идти справа налево
Очень просто: Сначала заполняем строке текстом и пробелами так, чтобы ее длина НЕ превышала размера экрана (это первый Repeat ... Until), а потом чтобы СОЗДАТЬ ИЛЛЮЗИЮ движения просто берем первый символ строки и переносим его в конец, и заново выводим строку на том же месте после очистки экрана... Из за смещения символов получаем видимость движения строки...

Соответственно, чтобы двигать строку слева направо надо брать ПОСЛЕДНИЙ символ и перемещать его в начало строки... Попробуй на бумаге, напиши слово и припиши к нему несколько символов подчеркивания (вместо пробелов), и проделай то, что я написАл... Лучший способ понять, что происходит smile.gif
Анастасия
Код
Попробуй на бумаге, напиши слово и припиши к нему несколько символов подчеркивания (вместо пробелов)

Именно этим я и занималась 2 последних вечера. Я догадывалась, что всё дело в этом сору , и когда уже не было сил додумываться, я просто перебором подставляла этот length(s) то в одно, то в другое место. Но все-таки не добралась сама до решения. Спасибо .
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.