 |
02.11.2011, 09:38
|
#1
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Помогите исправить ошибку
Здрасте. Я в МП совсем салага. Хотел сделать что-то наподобие полосы загрузки, но она не продвигается. Почему?
program Load;
var
progress,i:Integer;
begin
SetColor(0,0,0);
DrawRect(10,10,100,10);
for i:=0 to 100 do
begin
progress:=1;
FillRect(12,12,progress,7);
repaint;
progress:=progress+1;
repaint;
end;
end.
|
|
(Offline)
|
|
02.11.2011, 14:51
|
#2
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Помогите исправить ошибку
У тебя progress приравнивается к единице в самом начале цикла.
Вынеси наружу.
И repaint чем меньше вызываешь - тем лучше. В идеале - один раз в конце цикла. А тут он непонятно зачем два раза вызван.
|
(Offline)
|
|
02.11.2011, 15:06
|
#3
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Спасибо, "загрузка" идет 
|
(Offline)
|
|
02.11.2011, 15:07
|
#4
|
Бывалый
Регистрация: 16.09.2009
Адрес: Sun system
Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
|
Ответ: Помогите исправить ошибку
Можно прибавлять по два (или больше). 
|
(Offline)
|
|
02.11.2011, 16:05
|
#5
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Я знаю)
|
(Offline)
|
|
02.11.2011, 16:36
|
#6
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
program loadcar;
var
progress,i,S:Integer;
begin
progress:=1;
S:=1;
SetColor(0,0,0);
FillRect(1,1,240,320);
SetColor(200,170,0);
DrawText('Loading',100,130);
DrawRect(70,155,100,10);
for i:=0 to 96 do
begin
FillRect(72,157,progress,7);
progress:=progress+1;
drawImage(loadImage('/car.png')S,200);
S:=S+2;
repaint;
delay(20);
end;
end.
|
Должна идти загрузка и ехать внизу машина, но при компиляции выскакивает "error, parameter list is too short"
Что на этот раз не так?
|
(Offline)
|
|
02.11.2011, 16:54
|
#7
|
Знающий
Регистрация: 21.07.2009
Адрес: Украина
Сообщений: 219
Написано 44 полезных сообщений (для 78 пользователей)
|
Ответ: Помогите исправить ошибку
drawImage(loadImage('/car.png')S,200); замени на drawImage(loadImage('/car.png'),S,200);
|
(Offline)
|
|
02.11.2011, 17:18
|
#8
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Вот блин. Из-за какой-то запятой) Спасибо.
Как сделать, чтобы она не оставляла след?
|
(Offline)
|
|
02.11.2011, 18:39
|
#9
|
Мастер
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений (для 784 пользователей)
|
Ответ: Помогите исправить ошибку
заполнять экран белым чёрным цветом
Setcolor(0,0,0);
fillrect(getwidth,getheight);
А вообще лучше сделать
var car:image;
car:=loadImage('/car.png');
а потом рисовать
drawImage(car,S,200);
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
Последний раз редактировалось Igor, 02.11.2011 в 20:32.
|
(Offline)
|
|
02.11.2011, 19:39
|
#10
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
вот примерчик для любого разрешения

// progress sample for leonid
// (c) barsunduk
// 02.11.2011
program carload;
var
car: image;
i, scrW, scrH: integer;
// на входе состояние прогресса
// от 0 до scrW (ширина экрана)
procedure progress(x: integer);
var
w, h, y: integer;
s: string;
begin
w := GetImageWidth(car);
h := GetImageHeight(car);
y := scrH - h - h;
// очищается полоса с машинкой
SetColor(0, 0, 0);
FillRect(0, y, scrW, h);
// это можно удалить
// тут полоска зеленая рисуется с процентами
SetColor(0, 170, 0);
FillRect(0, y, x, h);
SetColor(240, 255, 240);
s := 'loading... ' + (100 * x / scrW) + '% ';
DrawText(s, x - GetStringWidth(s), y + h - GetStringHeight(s));
// для жирности
DrawText(s, 1 + x - GetStringWidth(s), y + h - GetStringHeight(s));
// рисуется машинка
DrawImage(car, x, y);
end;
begin
car := loadImage('/car.png');
scrW := GetWidth;
scrH := GetHeight;
SetColor(0, 0, 0);
FillRect(0, 0, scrW, scrH);
// цикл с шагом в 2 пиксела
for i := 0 to scrW / 2 do
begin
progress(i * 2);
repaint;
delay(40);
end;
// очищаем память от ненужной картинки
car := loadImage('');
delay(2000);
end.
в архиве тот же код
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
Эти 2 пользователя(ей) сказали Спасибо barsunduk за это полезное сообщение:
|
|
02.11.2011, 20:44
|
#11
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
вариант со снятием огрызка скриншота вместо рисования одноцветных прямоугольников, затирающих нашу машинку и ее какашки в виде надписи "loading N%"

// progress sample for leonid
// (c) barsunduk
// 02.11.2011
program carload;
var
car, back: image;
i, ww, scrW, scrH: integer;
// на входе состояние прогресса
// от 0 до scrW (ширина экрана)
procedure progress(x: integer);
var
w, h, y: integer;
s: string;
begin
w := GetImageWidth(car);
h := GetImageHeight(car);
y := scrH - h - h;
// восстанавливаем содержимое экрана из скриншота - стираем прогрессбар
DrawImage(back, 0, y);
s := 'loading... ' + (100 * x / scrW) + '% ';
SetColor(0, 0, 0);
DrawText(s, x - GetStringWidth(s), y + h - GetStringHeight(s));
SetColor(240, 255, 240);
DrawText(s, x - GetStringWidth(s) - 1, y + h - GetStringHeight(s) - 1);
// рисуется машинка
DrawImage(car, x, y);
end;
begin
car := loadImage('/car.png');
scrW := GetWidth;
scrH := GetHeight;
SetColor(0, 0, 0);
FillRect(0, 0, scrW, scrH);
// тут рисуется всякое... ну там реклама, лого, заставка, хз
// ...
// например завалим экран мусором:
ww := scrW;
if ww > 255 then
ww := 255;
for i := 0 to ww do
begin
SetColor(ww - i, ww - i, ww - i);
DrawLine(i, 0, i, scrH);
end;
// берем кусок скриншота
back := ImageFromCanvas(0, scrH - GetImageHeight(car) * 2, GetWidth, GetImageHeight(car));
// цикл с шагом в 2 пиксела
for i := 0 to scrW / 2 do
begin
progress(i * 2);
repaint;
delay(40);
end;
// очищаем память от ненужных картинок
delay(2000);
end.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
Последний раз редактировалось barsunduk, 09.11.2011 в 20:14.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.11.2011, 21:06
|
#12
|
Дэвелопер
Регистрация: 21.11.2009
Адрес: Киев
Сообщений: 1,699
Написано 657 полезных сообщений (для 1,962 пользователей)
|
Ответ: Помогите исправить ошибку
И зачем? Судя по его проблемам, он в твоей коде ничего не поймёт. Поощряешь бездумный копипаст.
leonid, почитай встроенную справку, и перед тем, как задавать вопросы, пользуйся поиском.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
02.11.2011, 21:44
|
#13
|
ПроЭктировщик
Регистрация: 09.05.2010
Адрес: рф ро шахты
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
|
Ответ: Помогите исправить ошибку
Сообщение от baton4ik
И зачем? Судя по его проблемам, он в твоей коде ничего не поймёт. Поощряешь бездумный копипаст.
leonid, почитай встроенную справку, и перед тем, как задавать вопросы, пользуйся поиском.
|
мне все же кажется, что на примерах с комментариями человеку легче будет разобраться. до некоторых вещей своим ходом доберешься нескоро, а заметив незнакомую функцию в чужом коде, обратишь на нее внимание. в следующий раз уже будешь знать, что искать, какой раздел хелпа штудировать в первую очередь.
а советы типа "читай справку" лично у меня убивают веру в сапиенсов.
__________________
to be or not to be - it's not a question!
2b or not 2b = ff
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
03.11.2011, 09:56
|
#14
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
Большое спасибо, вроде разобрался.
|
(Offline)
|
|
03.11.2011, 13:28
|
#15
|
Оператор ЭВМ
Регистрация: 01.11.2011
Сообщений: 35
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Помогите исправить ошибку
program wormshow;
var
scrW,scrH,xworm1,yworm1,i:integer;
title,worm1,box,map,worm,wormInfo,wormEnemy:image;
begin
scrW:=getWidth;
scrH:=getHeight;
title:=loadImage('/title.png');
box:=loadImage('/box.png');
worm1:=loadImage('/worm1.png');
xworm1:=230;
yworm1:=237;
SetColor(100,190,255);
FillRect(0,0,scrW,scrH);
drawImage(title,25,10);
drawImage(box,20,240);
if xworm1=60 then
box:=loadImage('');
for i:=0 to 60 do
begin
drawImage(worm1,xworm1,yworm1);
xworm1:=xworm1-4;
repaint;
delay(100);
end;
title:=loadImage('');
box:=loadImage('');
begin
map:=loadImage('/map.png');
wormEnemy:=loadImage('/wormEnemy.png');
wormInfo:=loadImage('/wormInfo.png');
worm:=loadImage('/worm.png');
DrawImage(map,0,0);
DrawImage(wormEnemy,1,184);
DrawImage(worm,210,12);
DrawImage(wormInfo,210,1);
repaint;
delay(3000);
end;
end.
|
Когда цикл заканчивается, все зависает. Почему?
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +1, время: 01:23.
|