Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.12.14;
Скачать: CL | DM;

Вниз

таймер   Найти похожие ветки 

 
newbie   (2008-11-04 15:08) [0]

Здравствуйте, мастера.

Первый раз работаю с таймерами и возникла проблема: когда пытаюсь сделать так, чтобы событие OnTimer сработало несколько раз, то получается, что оно срабатывает только последний из разов.

Суть программы в следующем: она должна перемещать несколько картинок по форме(типа анимации). Я процедуру написал, но когда вызываю её несколько раз, то перемещается только последняя картинка.

Подскажите пожалуйста, куда копать или как переделать.


 
Palladin ©   (2008-11-04 15:10) [1]


> оно срабатывает только последний из разов.

оно срабатывает много разов, но ты видишь только результат последнего


 
Правильный$Вася   (2008-11-04 15:15) [2]

код попыток в студию


 
Плохиш ©   (2008-11-04 15:16) [3]


> newbie   (04.11.08 15:08)  

У тебя ошибка в программе и таймеры в ней не виноваты.


 
Anatoly Podgoretsky ©   (2008-11-04 15:16) [4]

> newbie  (04.11.2008 15:08:00)  [0]

Вставь ProcessMessages


 
Anatoly Podgoretsky ©   (2008-11-04 15:17) [5]


> код попыток в студию

код пыток в студию


 
newbie   (2008-11-04 15:18) [6]

Тогда почему он во время предыдущих срабатываний не перемещает картинки?

MoveImage(Image1, 10, 10);
...
MoveImage(Image5, 10, 10);


Перемещается только Image5, причём как надо, остальные на месте...


 
newbie   (2008-11-04 15:27) [7]

извиняюсь, пока писал, тут уже много ответов появилось )
вот
> код пыток в студию

procedure TForm2.Timer2Timer(Sender: TObject);
begin
 if k<5
     then
     begin
     MovingImage.Left := MovingImage.Left + sml;
     MovingImage.Top  := MovingImage.Top  + smt;
     inc(k);
     end
     else
     begin
     Timer2.Enabled := false;
     MovingImage.Left := EndX;
     MovingImage.Top  := EndY;
     end
end;

procedure MoveImage(a: TImage; x, y: Integer);
begin
 MovingImage := a;   //для передачи в онтаймер2
 k := 1;

 begX := a.Left;     //глобальные переменные для работы в онТаймер2
 begY := a.Top;
 endX := x;
 endY := y;

 sml := trunc((endx-begx)/5);  //перемещается
 smt := trunc((endy-begy)/5);  //5 шагов

 Form2.Timer2.Enabled := true;
end;


 
Плохиш ©   (2008-11-04 15:35) [8]


> newbie   (04.11.08 15:27) [7]

Ну и какая связь между TForm2.Timer2Timer и MoveImage?


 
newbie   (2008-11-04 15:40) [9]


> Ну и какая связь

если имеются в виду переменные, то они глобальные. Описаны в одном модуле. Ну и когда в MoveImage Timer2 энейблится, то он перемещает картинку (MovingImage) в точку (EndX, EndY). По окончании перемещения(k=5) делаю дизейбл таймеру. Разве не так происходит?


 
Плохиш ©   (2008-11-04 15:46) [10]


> newbie   (04.11.08 15:40) [9]

Ok,
ну и какая связь между newbie   (04.11.08 15:08) и newbie   (04.11.08 15:40) [9]?


 
Правильный$Вася   (2008-11-04 15:51) [11]

соедини это в одном методе обработки срабатывания таймера и не городи огород из глобальных переменных, кои уследить в событийной среде вообще нереально


 
newbie   (2008-11-04 15:52) [12]

Такое чувство, что пришёл на собеседование какое-то, а не вопрос задал.

[0] - общее описание проблемы,
[6] и [7] -попросили код показать
[8] - не очень понял вопрос, попытался внести ясность, расписав подробнее

В данный момент читаю про ProcessMessages, ибо первый раз про них слышу.


 
newbie   (2008-11-04 15:59) [13]


> соедини это в одном методе

спасибо за ответ.

P.S. Но всё-таки хотелось бы услышать, почему перемещается только последняя картинка?


 
Плохиш ©   (2008-11-04 16:01) [14]

Скушная ветка :-(

> В данный момент читаю про ProcessMessages

В ракурсе приведённой информации в этой ветке, совершенно бесполезное занятие...


 
Плохиш ©   (2008-11-04 16:02) [15]


> Но всё-таки хотелось бы услышать, почему перемещается только
> последняя картинка?

Потому что MoveImage(<последняя картинка>, фигня, фигня);


 
newbie   (2008-11-04 16:12) [16]


> Потому что MoveImage(<последняя картинка>, фигня, фигня);

а то, что до этого написано
MoveImage(Image1, 1, 1);
MoveImage(Image2,1,1);
...

почему не выполняется? Я же про это спрашивал.


 
Правильный$Вася   (2008-11-04 16:16) [17]


> newbie   (04.11.08 16:12) [16]

потому что не видно, где же оно все вызывается
еще раз - соедини все в один метод
когда поймешь всю механику, осторожно можно будет вынуть независимую часть из него, если понадобится
а сейчас у тебя каша - управление таймером раскидано по разным местам, назначение координат - тоже, номера картинок вообще каким-то диковинным способом назначаются


 
Плохиш ©   (2008-11-04 16:21) [18]


> а то, что до этого написано
> MoveImage(Image1, 1, 1);
> MoveImage(Image2,1,1);
> ...
> почему не выполняется?

Почему же, вполне выполняется. А тебе советую почитать не про бесполезные для тебя в данный момент функции/процедуры, а про основы выполнения операторов в программе и про обработку сообщений вындовса...


 
{RASkov} ©   (2008-11-04 16:54) [19]

> [16] newbie   (04.11.08 16:12)
> почему не выполняется? Я же про это спрашивал.

потому как Timer2Timer и MoveImage выполняются независимо друг от друга и в Timer2Timer всегда MovingImage = последней картинке...
просто подумай...)

Эт плохой алгоритм перемещения картинок)


 
newbie   (2008-11-04 17:20) [20]

[19] - спасибо за разъясняние, теперь до меня дошло.

Хочу сказать, что сделать всё в одном обработчике было хорошей идеей, сейчас всё заработало ))

Обработку сообщений "вындовса" не очень понимаю, да и без этого всё заработало )


 
Andy BitOff ©   (2008-11-04 17:34) [21]

> newbie   (04.11.08 17:20) [20]
> Обработку сообщений "вындовса" не очень понимаю, да и без
> этого всё заработало

Жуть.


 
Правильный$Вася   (2008-11-04 18:40) [22]


> Обработку сообщений "вындовса" не очень понимаю

винда вся построена на событиях и сообщениях о том, что события произошли
срабатывание таймера - событие
нажатие кнопки - событие
отрисовка окна - событие
переключение между программами - событие
и на события ты пишешь обработчики "что делать, когда такое событие произошло"


 
newbie   (2008-11-04 19:49) [23]

[22] - на этом уровне понимание есть, я думал, что в [18] имеется в виду что-то ещё...


 
Правильный$Вася   (2008-11-04 20:46) [24]


> newbie   (04.11.08 19:49) [23]

еще огромное количество других событий и сообщений, как внутри процессов, так и между ними



Страницы: 1 вся ветка

Текущий архив: 2008.12.14;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.014 c
2-1225795373
Iriss
2008-11-04 13:42
2008.12.14
TTreeView активизировать элемент


1-1203508927
Evgen!y
2008-02-20 15:02
2008.12.14
Фильтр Sphere в Photoshop е


15-1223571951
Desdechado
2008-10-09 21:05
2008.12.14
Вопрос знатокам фотошопа


15-1223653872
Terasbetoni
2008-10-10 19:51
2008.12.14
Посоветуйте модуль для работы с двумерными графиками


3-1211525758
Михаил (Питер)
2008-05-23 10:55
2008.12.14
ADO