Форум программистов, компьютерный форум, киберфорум
Delphi: Графика, звук, видео
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 36
1

Анимация на форме

01.05.2014, 14:28. Показов 1760. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
С делфи знаком, мелкие задания в нем делаю. Задание в универе дали примерно такое: анимированное заполнение резервуара с водой. начал ковыряться с таймером, но ничего хорошего не вышло... мне бы только показать как делать 2D анимацию на форме...или исходник у кого подобный есть? это правда только часть моего задания. Остальное я сам!
Заранее благодарен тем кто откликнулся!=)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.05.2014, 14:28
Ответы с готовыми решениями:

Анимация в форме
Можно ли в каком-либо формате в форму воткнуть анимацию?

3D-анимация на форме
Есть 3d моделька с анимацией сделана в 3d Max. Хочу чтобы она при открытии формы загружалась и...

Анимация компонентов на форме
Ребят, нужно чтобы при нажатии кнопки на форму снизу выползал shape. Я пытался сделать через цыкл и...

Не работает анимация на форме
Добрый вечер. Прошу помощи! Пол дня искал ответ, так и не нашел в чем причина... Сделал...

13
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
01.05.2014, 20:33 2
а что не так с таймером?

Добавлено через 1 минуту
любая анимация - суть функция картинки от времени
мы создаем отображение на экран в зависимости от временнОй точки
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.05.2014, 08:55 3
Вот простой пример
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var
  Form1: TForm1;
  x1,y1,x2,y2,y:integer;
implementation
 
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Color:=clWhite;
x1:=Form1.ClientWidth div 2-150;
y1:=Form1.ClientHeight div 6;
x2:=Form1.ClientWidth-x1;
y2:=5*y1;
y:=y2;
Timer1.Enabled:=false;
Timer1.Interval:=50;
doublebuffered:=true;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;
 
procedure TForm1.FormPaint(Sender: TObject);
begin
with Form1.Canvas do
 begin
  pen.Color:=clBlack;
  pen.Width:=4;
  moveto(x1,y1);
  lineto(x1,y2);
  lineto(x2,y2);
  lineto(x2,y1);
  brush.Color:=clAqua;
  pen.Color:=clAqua;
  pen.Width:=1;
  rectangle(x1+2,y,x2-2,y2);
 end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
y:=y-2;
repaint;
if y<y1+4 then Timer1.Enabled:=false;
end;
0
Заблокирован
02.05.2014, 10:45 4
Что собственно нужно, рисовать сам процесс или объяснить что делать с таймером? Вам код дали, правда без коментов. И у него есть огромный минус. Как только таймер остановиться, в случае перекрытия окна другим приложением. Всё исчезнет. Поэтому таймер останавливать нельзя ни в коем случае. Рисовка должна идти постоянно.
В обработчике события (строка 42) Должен оставаться только один repaint
Проверка должна быть в процедуре рисования и стать 39 строкой.
39 if y>y1+4 then y:=y-2;

Но это в теории. Я не совсем уверен что в коде ничего не напутано. Ещё надо проверять.
0
0 / 0 / 0
Регистрация: 11.01.2014
Сообщений: 36
02.05.2014, 10:46  [ТС] 5
Спасибо! теперь всё понятно!
0
Заблокирован
02.05.2014, 11:14 6
не совсем так
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
02.05.2014, 11:15 7
если совсем по-хорошему, "правильная" анимация не должна опираться на приращения координат
тем более, при прорисовке

нужна функция, определяющая координаты всех объектов по текущему времени (или смещению времени от момента старта)

ну и проверка чтобы вовремя остановиться

т.е. что-то вроде

Delphi
1
2
3
4
5
6
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  CheckStopped;
  CountCoordinates;
  Repaint;
end;
это структурированное развитие последнего варианта
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
02.05.2014, 11:17 8
Цитата Сообщение от Leoparrd Посмотреть сообщение
В обработчике события (строка 42) Должен оставаться только один repaint
Проверка должна быть в процедуре рисования и стать 39 строкой.
39 if y>y1+4 then y:=y-2;
Так не работает, я написал так.
Delphi
1
2
3
4
5
6
procedure TForm1.Timer1Timer(Sender: TObject);
begin
y:=y-2;
if y<y1+4 then y:=y1+4;
repaint;
end;
0
Заблокирован
02.05.2014, 12:11 9
Мы работаем с формой и поэтому не будет затирания. Поскольку рисовка идёт в обработчике Paint формы. Но в других случаях, это не прокатит.
Но в графике таймер никогда не останавливают, а управляют процессом через флаги. Это раз.
Сделать нужно так, как я сказал. То есть перенести проверку в отрисовку. если этого не сделать. При повторном нажатии кнопки сосуд будет переливаться. то есть уровень жидкости выйдет за край.

Добавлено через 1 минуту
Puporev,
А у меня работает.

Добавлено через 2 минуты
Вот только что проверенный участок кода. А если вынести проверку в таймер, в последующее нажатие будет перелив
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.FormPaint(Sender: TObject);
begin
 with Form1.Canvas do
 begin
  pen.Color:=clBlack;
  pen.Width:=4;
  moveto(x1,y1);
  lineto(x1,y2);
  lineto(x2,y2);
  lineto(x2,y1);
  brush.Color:=clAqua;
  pen.Color:=clAqua;
  pen.Width:=1;
  rectangle(x1+2,y,x2-2,y2);
  if y>y1+4 then y:=y-2;
 end;
end;
 
procedure TForm1.Timer1Timer(Sender: TObject);
begin
repaint;
//if y<y1+4 then Timer1.Enabled:=false;
end;
Добавлено через 16 минут
И ещё. нужно рисовать не только "воду" а сам сосуд. То есть белый прямоугольник, а только потом синий.
Иначе невозможно организовать слив воды.

Добавлено через 31 минуту
krapotkin,
Вы абсолютно правы. Но в данном случае это несущественно.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
02.05.2014, 12:25 10
кстати, что-то в голову не пришло сразу.

в новой Delphi есть FMX, где функции мелкой анимации практически прямо встроены в объекты
очень удобно для таких приложений
0
Заблокирован
02.05.2014, 16:23 11
krapotkin,
Ага, зато как их раздувает. Уважающий себя программист с опытом делает всё ручками.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
02.05.2014, 19:55 12
уважающий себя программист делает так как быстрее и нравится заказчику ))

у меня FMX программа работает с фотографиями 5Мб каждая. за сеанс - > 1Гб
сама она весит 8 Мб в Debug варианте.
вот вообще никого не парит.
и даже если она будет 50 ))
заказчик доволен. все мигает, анимируется, работает ))
0
Заблокирован
05.05.2014, 20:31 13
krapotkin,
А что если кто предъявит такую же прогу но размеров не в 50 мегабайт а в 50 килобайт? И всё будет анимироваться и мигать?

И потом... сейчас в моду вошли мобильные устройства. Вот и думай. На мобилу вешать файл в 8 мегабайт.
0
5786 / 4528 / 1431
Регистрация: 14.04.2014
Сообщений: 20,160
Записей в блоге: 20
05.05.2014, 21:27 14
мои заказчики вполне рады, если программа хорошо работает
то, что она меньше будет места занимать, это вообще никого не волнует. реально
специфика корпоративных и заказных приложений )
25 мб - это три трека mp3 по 4 минуты ))

MS Office абсолютный монстр в этом плане, и ничего.
0
05.05.2014, 21:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2014, 21:27
Помогаю со студенческими работами здесь

Анимация объекта на форме
Имеется туча, из нее падает снежинка.Как сделать так, чтобы эта снежинка после того как выпала из...

Анимация элементов управления на форме
Необходимо создать форму с некоторыми элементами (buttons, textboxes, checkboxes...). При нажатии...

Анимация объектов и текста на форме
Как сделать анимацию изменения размера объекта, изменение текста из одного в другой в label ,...

Анимация передвижения PictureBox по форме
Я пытаюсь осуществить передвижение pictureBox по экрану формы, вызвав таймер, на каждый тик...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru