задача "бегущая строка" помогите
"создать программу, которая выводит на экран бегущую строку"
и где почитать
Спасибо!!!
Помогите с задачей пожалуйста
"создать программу, которая выводит на экран бегущую строку"
и где почитать
Спасибо!!!
Первая мысля:
Используем PutImage
Т.е. чего-то там написали и двигаем куда надо
Соответственно, с циклом чтобы бегало по экрану.
Первая мысля:
Используем PutImage
Т.е. чего-то там написали и двигаем куда надо
Соответственно, с циклом чтобы бегало по экрану.
[color=blue]Greenering[/color]
Спасибо!!!
Сорри, только начал учить программирование, да и то по бразильской системе, на заочке дали методички, сказали чтобы решали контрольные и приходили на экзамен - это вся инфа. Ток начал читать - Фаронов "Турбо Паскаль в подлиннике", но пока слабо и вязко.
Программа должна быть без использования CRT. Если каждый символ имеет свой адрес в строке, то нельзя ли сделать такое чтобы текст смещался на один символ к началу, причем первый символ становился бы в конец строки и запустить этот процесс на постоянный повтор до нажатия любой клавиши, символизирующей окончание работы программы?
Есть в этом какой-нть смысл?
Нарыл несколько исходничков, но они слишком круто написаны, мощные и красивые, высмотреть нужный код пока несумел.
Есть в этом какой-нть смысл?
Смысл есть во всем. И еще выход по нажатию клавиши это модуль CRT!
Нарыл несколько исходничков, но они слишком круто написаны, мощные и красивые, высмотреть нужный код пока несумел.
Делись!
Программа должна быть без использования CRT. Если каждый символ имеет свой адрес в строке, то нельзя ли сделать такое чтобы текст смещался на один символ к началу, причем первый символ становился бы в конец строки и запустить этот процесс на постоянный повтор до нажатия любой клавиши, символизирующей окончание работы программы?
Режим графический/текстовый?
Если текстовый - то делать вобще нечего. пишешь текст в цикле прямо в видеопамять. По адресу $B800 кажется она начинается для 80х25х16 режима.
2 байта на символ: 1й - символ, 2й - атрибуты(ака цвет сивола/фона)
2Greenering: Можно и через BIOS (собственно CRT как оболочка биоса и работает.)
не помню, как на паскале прерывания оформляются, но на асме это выглядит примерно так:
asm
mov AH ,9 { прерывание 10H, подфункция 9 }
mov AL ,ch { выводимый символ }
mov BH ,0 { страница }
mov BL ,attribute { атрибуты }
mov CX ,1 { фактор повторения }
int $10 { вывод символа }
end
asm
mov AH ,9 { прерывание 10H, подфункция 9 }
mov AL ,ch { выводимый символ }
mov BH ,0 { страница }
mov BL ,attribute { атрибуты }
mov CX ,1 { фактор повторения }
int $10 { вывод символа }
end
2 Унэкспектед
Сдается мне что человек
а)с заочки
б)пас видевший в первый раз
в)
В асм не воткнется
Да и преподов напугает
Ты сам как считаешь-то?
var Regs : Registers;
begin
Regs.AH:=9;
Regs.AL:=ch;
Regs.BH:=0;
Regs.BL:=attribute;
Regs.CX:=1;
Intr($10,Regs);
end;
Хотя с видеопямятью - самое лучшее. И проще, и быстрее, и без лишних заморочек с прерываниями.
type
VideoMem = array[1..25,1..80,1..2] of byte; { 1..25 - y; 1..80 - x }
var
Video : VideoMem absolute $b800:00;
Video[10,20,1]:=Ord(ch); { ASCII-код символа в x=20 и y=10 }
Video[10,20,2]:=Red; { Аттрибуты цвета }
ЗЫ: А за асм (если объяснить сможет) еще и плюс получит, тем более, что далеко не все преподы его знают :-)
Ладно. Другой вариант:
var Regs : Registers;
begin
Regs.AH:=9;
Regs.AL:=ch;
Regs.BH:=0;
Regs.BL:=attribute;
Regs.CX:=1;
Intr($10,Regs);
end;
Хотя с видеопямятью - самое лучшее. И проще, и быстрее, и без лишних заморочек с прерываниями.
type
VideoMem = array[1..25,1..80,1..2] of byte; { 1..25 - y; 1..80 - x }
var
Video : VideoMem absolute $b800:00;
Video[10,20,1]:=Ord(ch); { ASCII-код символа в x=20 и y=10 }
Video[10,20,2]:=Red; { Аттрибуты цвета }
ЗЫ: А за асм (если объяснить сможет) еще и плюс получит, тем более, что далеко не все преподы его знают :-)
оСТАЛИСЬ мелочи объяснить асм
и найти коды символов
да что-бы в цикле перебирались и в слова складывались.
найти коды символов
да что-бы в цикле перебирались и в слова складывались.
Эээ... не совсем понял, зачем их искать?
если я правильно помню, то должно работать:
var
s: string;
i:integer;
for i:=1 to s[0] на экран -> s
соответственно, если добавить
var j:integer;
for i=1 to s[0]
for j=0 to дофига
writechar(80-j+i,y,s)
----------^^^^^
очень грубо, без проверок, но бежать будет. :-)
правда пока не втыкаюсь. Времени ноль. Сорри, рано вылез я в топик со своей задачкой. Далеко не все понятно из того что вы, акулы компьютерного пера, написали. Научусь и разберусь. Спасибо еще раз ;)
Unexpected вероятнее всего текстовый, это первая тема "символы и строки"
Greenering сюда я все залил, не помню где брал и возможно не все по теме http://sources.codenet.ru/files/incoming/beguchka.rar
Нарыл еще такой код на http://olimpiada.com.ru/learning.php?lesson=all
uses crt;
var str,st1:string[160];
i,k:byte;
begin
str:='Для получения бумажной копии включите принтер';
st1:=' ';
Textbackground(5); {установка цветв фона экрана}
ClrScr; {очистка экрана}
textcolor(blue); {установка цвета текста}
st1:=st1+str;
For i:=1 to length(st1) do
begin
Delete(st1,1,1);
GoToXY(1,10); {установка текстового курсора в указанное место(1 позиция 10-ой строки)}
Write(st1); {вывод текстовой строки}
Delay(4000); {Задержка выполнения программы}
DelLine {Удаление строки отмеченной курсором}
end
end.
Ток он у меня не запускается на BP и TP
А про CRT наверное я сам придумал, сказали писать в Delphi, а там этот модуль не работает, так я где-то слышал, посему решил, что без него, может и с ним, сорри за дезу.
и еще такой есть (наверное там взял где пишут)
мож вам интересно просто.
-------------
Кидайте на форму Timer и Label. И по событию OnTimer пишите такой код:
procedure TForm1.Timer1Timer(Sender: TObject);
const LengthGoString = 10;
Gostring = 'Этот код был взят с сайта http://www.delphibest.narod.ru,'+
' так же здесь вы найдёте ещё много других исходников! Этот код б';
const i: Integer = 1;
begin
Label1.Caption:=Copy(GoString,i,LengthGoString);
Inc(i);
if Length(GoString)-LengthGostring < i then
i:=1;
end;
если тебе надо на Delhi то ты сам привел нужный тебе код (пример 2).
Что касается 1 напиши что именно говорит не запускаясь!
[color=green]Спасибо Всем Большое[/color]
uses crt;
var str,st1:string[160];
i,k:byte;
begin
str:='Для получения бумажной копии включите принтер';
st1:=' ';
Textbackground(5); {установка цветв фона экрана}
ClrScr; {очистка экрана}
textcolor(blue); {установка цвета текста}
st1:=st1+str;
For i:=1 to length(st1) do
begin
Delete(st1,1,1);
GoToXY(1,10); {установка текстового курсора в указанное место(1 позиция 10-ой строки)}
Write(st1); {вывод текстовой строки}
Delay(4000); {Задержка выполнения программы}
DelLine {Удаление строки отмеченной курсором}
end
end.
Короче код приведенный сверху жалкое подобие бегущей строки. Строка бежит один раз, да и тот как то криво.
Но на ее основе можно написать хорошую прогу текстобегучку.
Завтра исходник пришлю.
PS Если время будет прогу писать
Delphi – общепризнанный лидер среди инструментов для создания приложений и систем, функционирующих на платформе Windows. Передовая объектно-ориентированная технология визуального проектирования позволяет отдельным программистам и коллективам разработчиков почуствовать уверенность в возможности полного удовлетворения запросов самых требовательных пользователей и устойчивость своего положения на рынке высоких технологий.
Pascal - это императивный язык программирования высокого уровня, имеющий строгую типизацию данных и переменных. Автором языка Pascal является профессор, директор Института информатики Швейцарской высшей политехнической школы Никлаус Вирт, работавший над созданием этого языка в 1965-1971 гг. Язык программирования Pascal был назван в честь Блеза Паскаля, выдающегося французского математика и философа, жившего в 1623-1662 гг.
а говорит вот что
[Fatal Error] Project1.dpr(6): File not found: 'CRT.dcu'
Я же не говорил, что это нужно компилировать в delphi.Там красивые, на мой взгляд, бегучки.
Здорово, что пример -2- это толковый код, но я пока не втыкаюсь :(
Greenering Спасибо, очень благодарен, если тебя не затруднит...
кто тебе сказал что первый надо компилить под Delphi? он под TP/BP! никакого DCU там в принципе не должно быть, тока не пытайся тот исходник который ты открывал в Delphi компилить под TP/BP, ничего не получится, создай заново прямо в редакторе TP/BP!
а насчет второго кода его точно необходимо переписывать, это-же надо такое придумать - пытаться использовать константу как переменную!
не затруднит...
Держи решение, только компилируй под TP/BP
На край в дельфи под консоль
uses crt;
var str, str2: string;
i,k:byte;
Begin
clrscr;
str:=' Сюда вбиваем текст';
k:=80-length(str);
for i:=1 to k-1 do
str:=str+' ';
repeat
delete(str,1,1);
gotoxy(1,10);
write(str);
delay(4000);
delline;
str2:=copy(str,1,1);
str:=str+str2;
until keypressed;
end.
[color=blue]Greenering[/color]
Программа должна быть без использования CRT.
:)
А про CRT наверное я сам придумал, сказали писать в Delphi, а там этот модуль не работает, так я где-то слышал, посему решил, что без него, может и с ним, сорри за дезу.
:)
Величайшее Спасибо!!! Супер, все работает :)
[color=blue]Greenering & Unexpected[/color] рад что повеселил Вас своими ляпами :) научусь и больше не буду пороть чепухи.
Спасибо!!!
[color=blue]Greenering[/color]
Величайшее Спасибо!!! Супер, все работает :)
[color=blue]Greenering & Unexpected[/color] рад что повеселил Вас своими ляпами :) научусь и больше не буду пороть чепухи.
Спасибо!!!
Будь здоров!
Если что обращайся.
SysUtils, Crt;
var
B:Byte;
begin { TODO -oUser -cConsole Main : Insert code here }
WriteLn('Передача байта через сервис BIOS');
WriteLn('Порт COM1');
Asm
Mov Ah,0
Mov Dx,0
Mov Al,227
INT 14H
End;
While not KeyPressed do begin
Write('ВВедите байт:'); ReadLn(B);
Asm
Mov Ah,1
Mov Dx,0
Mov Al,B
INT 14H
End;
end;
end.
[Fatal Error] Byte.dpr(7): File not found: 'Crt.dcu'
Что делать?
Delphi 7
Всё просто -
var S:array[0..79] of Char;
i:integer;
g:integer;
begin
clrscr;
write('Vvedite stroky:');
readln(S);
clrscr;
g:=2;
repeat
gotoxy(g,1);
for i:=0 to StrLen(S) do
write(S);
gotoxy(g-1,1);
write(' ');
g:=g+1;
delay(20000);
until keypressed;
end.
А если надо справа налево, то
repeat
gotoxy(g,1);
for i:=0 to StrLen(S) do
write(S);
gotoxy(g+strlen(s),1);
write(' ');
g:=g-1;
delay(20000);
until keypressed;
...вот так. Второй вариант не проверял, могу ошибаться. А вот первый работает 100%.
Что делать?
Delphi 7
В Delphi нет модуля CRT...
Это чудо надо компилить под Turbo Pascal
Однако в TP нет модуля SysUtils... Да и не нужен он здесь