Сообщений: 831
Написано 442 полезных сообщений (для 1,836 пользователей)
Ответ: Помогите исправить ошибку
У тебя progress приравнивается к единице в самом начале цикла.
Вынеси наружу.
И repaint чем меньше вызываешь - тем лучше. В идеале - один раз в конце цикла. А тут он непонятно зачем два раза вызван.
__________________ N"Gasta! Kvata! Kvakis!
Ahkstas so novajxletero (oix jhemile) so Ranetauw.
Сообщений: 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"
Что на этот раз не так?
Сообщений: 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
Сообщений: 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, 10.11.2011 в 00:14.
И зачем? Судя по его проблемам, он в твоей коде ничего не поймёт. Поощряешь бездумный копипаст. leonid, почитай встроенную справку, и перед тем, как задавать вопросы, пользуйся поиском.
Сообщений: 177
Написано 66 полезных сообщений (для 271 пользователей)
Ответ: Помогите исправить ошибку
Сообщение от baton4ik
И зачем? Судя по его проблемам, он в твоей коде ничего не поймёт. Поощряешь бездумный копипаст. leonid, почитай встроенную справку, и перед тем, как задавать вопросы, пользуйся поиском.
мне все же кажется, что на примерах с комментариями человеку легче будет разобраться. до некоторых вещей своим ходом доберешься нескоро, а заметив незнакомую функцию в чужом коде, обратишь на нее внимание. в следующий раз уже будешь знать, что искать, какой раздел хелпа штудировать в первую очередь.
а советы типа "читай справку" лично у меня убивают веру в сапиенсов.
__________________ to be or not to be - it's not a question! 2b or not 2b = ff