Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Разное
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 19.07.2010, 14:40
Tier Tier вне форума
Прохожий
 
Регистрация: 19.07.2010
Сообщения: 1
Репутация: 10
По умолчанию Остановка выполнения процедуры на период прорисовки анимации

Доброе время суток!
Курю новичковую ветку и пока не нашел решение.
Проблема:
Остановить выполнение процедуры в конкретном месте на время выполнения анимации(n-циклов таймера которые выполняют пошаговое перемещение по окну из точки А в точку Б) после чего продолжить выполнение процедуры.

[спойлер](далее формулировка задачи чтобы можно было ответить "а оно тебе надо?")
6 складов с ящиками, 1 Вася.
Василий берет команды из стека(команды вида "из первого в пятый") и таскает ящики между складами. Скорость выполнения регулируется трекбаром на экране.
Один ньюанс: принес ящик на заполненный склад - несет обратно, спрашивает другую команду у пользователя; пришел забирать ящик с пустого склада - спрашивает у пользователя другую команду.

Касательно решения: да, можно расколотить на две процедуры то что до запуска таймера и то что после. Тогда придется заняться рукоделием и дописать в таймер еще код для того чтобы определить что Вася должен делать после того как он положил ящик на склад(то ли вернул ящик после попытки запихать на заполненный склад(и нужно запросить другую команду у юзверя), то ли выполнил команду и должен взять из стека следующую)
[/спойлер]

Добавлено 23.07.10
Подсказали добрые люди что сие решается при помощи потоков(отдельный поток на обработку анимации), попробуем

Последний раз редактировалось Tier, 23.07.2010 в 12:18.
Ответить с цитированием
  #2  
Старый 14.08.2010, 00:19
Gray_81 Gray_81 вне форума
Прохожий
 
Регистрация: 12.08.2010
Сообщения: 14
Репутация: 10
По умолчанию

засунуть процедурувпоток и суспендить...
Ответить с цитированием
  #3  
Старый 14.08.2010, 05:34
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,087
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А я бы подругому решал эту проблему.
У тебя есть некоторое исполнительное устройство (Вася). Вася может выполнять следующий набор команд:
- POP(S): взять ящик со склада (должен быть на этом складе и Вяся и ящик и у Васи не должно быть ящика);
- PUT(S): положить ящик; (Вася должен быть на нужном складе, у него д.б. ящик и на складе должно быть место)
-MOVE(S): перемещаться между складами.

Теперь о командах пользователя.
Команда пользователя представляет собой микропрограмму.
Путь надо отнести ящик со склада 1 на склад 2.
Тогда микропрограмма выглядит так:
MOVE(1)
POP(1)
MOVE(2)
PUT(2)
Если после выполнения команды пользователя Вася должен вернуться на изначальный склад, то надо добавить
MOVE(1)
Каждый шаг отрабатывается отдельно (у тебя в коде).
Т.е. для каждой команды надо написать процедуру, которая будет делать анимацию. Делать сама и не возвращать управление, пока не выполнит.
Тогда у тебя будет некоторый унифицированный механизм исполнения потока таких команд.
Теперь про отрисовку. У тебя должен быть объект, который себя отрисовывает в нужных координатах по тем условиям (есть у Васи ящик или нет), которые заданны в нем (объекте).

Все. Осталост только заблокировать ввод пользователя до конца исполнения программы
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 22:59.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025