Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.09.2009, 00:26   #1
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию Бесконечный цикл с определенным шагом в Delphi7

Вообщем проблема у меня такая. Мне нужно плавно и без дерганий переместить image. Я пробывал по таймеру, но есть проблема таймер не очень точный и перемещение происходит с небольшими рывками и с нагрузкой на проц. Дальше я пробывал цикл for to do с использованием sleep(), но там тоже есть проблема прога зависает а после картинка без перемещения оказывается в нужном месте.
Вот я и решил попробывать сделать бесконечноый цикл с шагом например 4, ну что то типа таймера, возможно это сделать в delphi? Если да, то как это сделать? помогите пожалуста.
Спасибо за внимание
BuT@JL вне форума Ответить с цитированием
Старый 04.09.2009, 00:48   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от BuT@JL
Дальше я пробывал цикл for to do с использованием sleep(), но там тоже есть проблема прога зависает а после картинка без перемещения оказывается в нужном месте.
А вы вот так сделайте:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i : longint;
x : integer;
begin
Image1.Picture.LoadFromFile('1.bmp');
x := Image1.Left;

for i:=1 to 20 do
 begin
 inc(x);
 Image1.Left := x;
 Image1.Refresh;
 Sleep(100);
 end;

end;
Цитата:
Вот я и решил попробывать сделать бесконечноый цикл с шагом например 4
Цикл с заданным шагом можно сделать используя while:
Код:
step := 4;
i := 0;
while i<100 do
 begin
 //..............
 //..............
 x := x + step;
 end;
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 04.09.2009, 06:06   #3
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Для этого таймер достаточно точный, скорее мощности процессора не хватает. От манипуляций с циклами думаю ничего не изменится.
Картинка большая?
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 04.09.2009, 07:03   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

а не проще в потоке?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 04.09.2009, 10:03   #5
АНК
Пользователь
 
Регистрация: 01.09.2009
Сообщений: 30
По умолчанию

Цитата:
Сообщение от Sazary Посмотреть сообщение
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i : longint;
x : integer;
begin
Image1.Picture.LoadFromFile('1.bmp');
x := Image1.Left;

for i:=1 to 20 do
 begin
 inc(x);
 Image1.Left := x;
 Image1.Refresh;
 Sleep(100);
 end;
end;
Чтобы Image1.Refresh; выполнялось в этом цикле необходимо добавить Application.ProcessMessages;
АНК вне форума Ответить с цитированием
Старый 04.09.2009, 12:12   #6
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

Цитата:
Сообщение от mutabor Посмотреть сообщение
Для этого таймер достаточно точный, скорее мощности процессора не хватает. От манипуляций с циклами думаю ничего не изменится.
Картинка большая?
Процессор не особо слабый AMD Athlon 64 X2 6000+
У меня всего три картики: одна стоит на фоне (1024 х 768),
а остальные 2 двигаюстя (780 х 516)

Цитата:
Сообщение от BARNEY Посмотреть сообщение
а не проще в потоке?
Я ни когда не работал с потоками, короче не умею )
BuT@JL вне форума Ответить с цитированием
Старый 04.09.2009, 12:15   #7
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

ну учиться думаю пора читайте
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 04.09.2009, 15:30   #8
BuT@JL
Форумчанин
 
Регистрация: 27.11.2008
Сообщений: 137
По умолчанию

Потоками тоже не получается, нагрузка на проц как шла так и идет 40%
BuT@JL вне форума Ответить с цитированием
Старый 04.09.2009, 15:39   #9
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Вы их синхронизируете? Попробуйте выставить меньший приоритет
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 04.09.2009, 15:41   #10
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Большие картинки, будет дергаться.
Во первых если с имиджем, нужно задать DoubleBuffered для формы, а лучше битмапы на канву формы выводить.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как запустить цикл for с шагом отличным от единицы Altera Общие вопросы Delphi 25 21.05.2015 15:14
Таймаут и бесконечный цикл Terikon Работа с сетью в Delphi 4 30.03.2009 14:48
цикл...и по ходу бесконечный... victum Помощь студентам 10 07.01.2009 15:57
Бесконечный цикл(visual c++) JOFRIF Visual C++ 10 26.08.2008 22:43
Бесконечный цикл Эдуард Общие вопросы C/C++ 4 03.04.2008 17:28