Изобразить текстовое окно на экране, в котором содержится информация о текущем фоне окна и фона экрана и текущем цвете текста в окне.Окно двигается по экрану с постоянной скоростью слева направо паралельно горизонтальной оси. При нажатии клавиши ENTER меняется меняется текущий цвет фона экрана и текущий цвет текста в окне.
Получилось только вот -( Не знаю как реализовать смену цвета и вывести его. Помогите...)
Удалось сделать:
-текстовое окно с текстом
-при нажатии 'ENTER' меняется цвет текста
-На след. строке выводится цвет текста
-при нажатии 'ESC' выход
uses crt,graph;
var gd,gm,x,y:integer;
c:char;
n:integer;
procedure set_font(x,y:integer);
begin
setlinestyle(0,0,3);
rectangle(x-20,y-18,x+280,y+24);
end;
Procedure CaseColor(C:char;n:integer);
begin
randomize;
n:=random(5);
Case n of
0:outtextxy(x-10,y+13,'COLOR TEXT:BLACK');
1:outtextxy(x-10,y+13,'COLOR TEXT:BLUE');
2:outtextxy(x-10,y+13,'COLOR TEXT:GREEN');
3:outtextxy(x-10,y+13,'COLOR TEXT:GYAN');
4:outtextxy(x-10,y+13,'COLOR TEXT:RED');
5:outtextxy(x-10,y+13,'COLOR TEXT:MAGENTA');
end;
setcolor(n);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end;
begin
gd:=detect;
initgraph(gd,gm,'c:\bgi');
x:=getmaxx div 2-136; y:=getmaxy div 2;
set_font(x,y);
while c<>#27 do begin
if keypressed then c:=readkey;
case c of
#13 : BEGIN
casecolor(c,n);
c:='0';
end;
end;
end;
closegraph;
end.
moveto(x-10,y+13);clreolне получилось
Procedure CaseColor(C:char;n:integer);Randomize я убрал отсюда, ее лучше вызывать один раз, при старте программы
const
colors: array[0 .. 5] of string = (
'BLACK', 'BLUE', 'GREEN', 'CYAN', 'RED', 'MAGENTA'
);
begin
setfillstyle(solidfill, getbkcolor);
bar(x-17, y-15, x+277, y+21);
n:=random(5);
Case n of
0 .. 5:
outtextxy(x-10,y+13,'COLOR TEXT:'+colors[n]);
end;
setcolor(n);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end;
Как я понял, надо сделать так:
Хм... То есть, тебе "обязательно нужна сразу и дудочка и кувшинчик" (С) ? И обрабатывать нажатие Enter-а, чтоб менялся цвет выводимых строк, и при этом чтоб окно ползло по экрану? Это уже сложнее, но все равно реализуемо... Если это - то что тебе надо, покажу, как сделать...
uses crt, graph;Если непонятно - говори, где. Я добавлю комментарии.
procedure set_font(x,y:integer);
var color: integer;
begin
color := getcolor;
setcolor(white);
setlinestyle(0,0,3);
rectangle(x-20,y-18,x+280,y+24);
setcolor(color);
end;
var
x, y: integer;
Procedure CaseColor(change: boolean; var n:integer);
const
prev_n: integer = 0;
colors: array[0 .. 5] of string = (
'BLACK', 'BLUE', 'GREEN', 'CYAN', 'RED', 'MAGENTA'
);
begin
setfillstyle(solidfill, getbkcolor);
bar(x-17, y-15, x+277, y+21);
if change then begin
n := random(6);
Case n of
0 .. 5:
outtextxy(x-10,y+13,'COLOR TEXT:'+colors[n]);
end;
prev_n := n;
setcolor(n);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end
else begin
outtextxy(x-10,y+13,'COLOR TEXT:'+colors[prev_n]);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end;
end;
var
gd, gm: integer;
c: char;
n: integer;
begin
randomize;
gd := detect;
initgraph(gd,gm,'');
x := 25;
y := getmaxy div 2;
c := #0;
repeat
set_font(x,y);
casecolor(false, n);
if keypressed then c := readkey;
case c of
#13 :
begin
casecolor(true, n);
c:=#0;
end;
end;
delay(40);
setfillstyle(solidfill, getbkcolor);
bar(x-21,y-19,x+281,y+25);
inc(x);
until (x + 280 > getmaxx) or (c = #27);
closegraph;
end.
uses crt, graph;Если непонятно - говори, где. Я добавлю комментарии.
procedure set_font(x,y:integer);
var color: integer;
begin
color := getcolor;
setcolor(white);
setlinestyle(0,0,3);
rectangle(x-20,y-18,x+280,y+24);
setcolor(color);
end;
var
x, y: integer;
Procedure CaseColor(change: boolean; var n:integer);
const
prev_n: integer = 0;
colors: array[0 .. 5] of string = (
'BLACK', 'BLUE', 'GREEN', 'CYAN', 'RED', 'MAGENTA'
);
begin
setfillstyle(solidfill, getbkcolor);
bar(x-17, y-15, x+277, y+21);
if change then begin
n := random(6);
Case n of
0 .. 5:
outtextxy(x-10,y+13,'COLOR TEXT:'+colors[n]);
end;
prev_n := n;
setcolor(n);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end
else begin
outtextxy(x-10,y+13,'COLOR TEXT:'+colors[prev_n]);
outtextxy(x-10,y-12,' TEXT IN WINDOW ');
end;
end;
var
gd, gm: integer;
c: char;
n: integer;
begin
randomize;
gd := detect;
initgraph(gd,gm,'');
x := 25;
y := getmaxy div 2;
c := #0;
repeat
set_font(x,y);
casecolor(false, n);
if keypressed then c := readkey;
case c of
#13 :
begin
casecolor(true, n);
c:=#0;
end;
end;
delay(40);
setfillstyle(solidfill, getbkcolor);
bar(x-21,y-19,x+281,y+25);
inc(x);
until (x + 280 > getmaxx) or (c = #27);
closegraph;
end.
А ты задержку установил бы побольше, я тестировал на FPC, для Турбо Паскаля надо другие значения для Delay.