короче:
я сделал "фон" я хочу сделать движение на "переднем плане" т.е чтоб фон не стирался.
cleardevice пробовал слишком медленно...
вот код:
uses crt,graph;
var
gd,gm,i,j,l:integer;
o:byte;
s:string;
begin
randomize;
gd:=detect;
initgraph(gd,gm,'');
setcolor(green);
for j:=1 to getmaxy do
begin
j:=j+10;
for i:=1 to getmaxx do
begin
o:=random(256);
i:=i+10;
outtextxy(i,j,chr(o));
end;
end;
readln;
end.
Что двигать будешь? Фигуру какую-нибудь?
текст
Запоминай маленький участок экрана на том месте, куда будешь выводить текст (через GetImage), потом - PutImage для того чтобы удалить текст, и выводи его в другом месте...
а чё там про видеостраницы ?
А не рановато? Ты бы пока с одной разобрался... Не торопись...
=)
ок
[offtopic]
блин пол-года фигней маялся....
так бы щас паскаль уже хорошо знал[/offtopic]
Procedure Getlmage(X1,Y1,X2,Y2: Integer; var Buf)
Buf - переменная или участок кучи, куда будет помещена копия видеопамяти с фрагментом изображения.
uses crt,graph;
var
gd,gm,i,j,l:integer;
o:byte;
f:word;
s:string;
begin
randomize;
gd:=detect;
initgraph(gd,gm,'');
setcolor(green);
for j:=1 to getmaxy do
begin
j:=j+10;
for i:=1 to getmaxx do
begin
o:=random(256);
i:=i+10;
outtextxy(i,j,chr(o));
end;
end;
f:=imagesize(0,0,400,400);
getimage(0,0,400,400,f);
delay(200);
putimage(300,300,f,0);
readln;
end.
f:word;
...
getimage(0,0,400,400,f);
эээ... я не совсем понял 4 параметр...
а если longint ?
попробовал так....
f:longint;
var
f:word;
buf: pointer;
...
f:=imagesize(0,0,400,400);
getmem(buf, f);
getimage(0,0,400,400,buf^);
cleardevice; { для проверки }
putimage(100, 0, buf^, CopyPut);
uses crt,graph;
var
gd,gm,i,j,l:integer;
o:byte;
f:word;
buf:pointer;
s:string;
begin
randomize;
gd:=detect;
initgraph(gd,gm,'');
setcolor(green);
for j:=1 to getmaxy do
begin
j:=j+10;
for i:=1 to getmaxx do
begin
o:=random(256);
i:=i+10;
outtextxy(i,j,chr(o));
end;
end;
f:=imagesize(0,0,400,400);
getmem(buf,f);
getimage(0,0,400,400,buf^);
cleardevice;
putimage(100,0,buf^,0);
freemem(buf,f);
readln;
end.
Может потому что графический режим не закрываешь? (CloseGraph)
f:=imagesize(0,0,400,400);
getmem(buf,f);
getimage(0,0,400,400,buf^);
cleardevice;
putimage(100,0,buf^,0);
freemem(buf,f);
closegraph;
readln;
end.
Неа, скорее всего причина такогва:
GetImage сохраняет картинку в виде массива... Для картинки 400x400 нужно
160000 байт для режима с 256 цветами. У нас режим 4 bits, для картинки
нужно 160000x0.5=80000 байт, что превышает возможное кол-во зарезервировать память для Pointer( а оно равно ~65500 байт). И прога виснет в операторе GetMem...
Возможные решения: разбить экран на четыре части и для них завести переменные Buf1,Buf2,Buf3,Buf4...
suriv, а ты убедился, что Buf у тебя не равен Nil? И вообще, что ты запрашиваешь меньше 64К памяти?
Ах, точно! Если картинка занимает места больше возможного, то ImageSize возвращает ноль!
спасибо...