Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

таймер [D7]


Страницы:   1 2

newbie ©   (2008-11-04 15:08:00) 

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

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

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

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


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


> newbie   (04.11.08 19:49) [23]

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


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

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


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


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

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


Andy BitOff   (2008-11-04 17:34:00) [4]

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

Жуть.


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

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

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

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


{RASkov}   (2008-11-04 16:54:00) [6]

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

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

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


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


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

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


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


> newbie   (04.11.08 16:12) [16]

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


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


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

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

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


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


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

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


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

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

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

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


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


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

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

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


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

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

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

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


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

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


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


> newbie   (04.11.08 15:40) [9]

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


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


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

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


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


> newbie   (04.11.08 15:27) [7]

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


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

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

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;


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

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

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


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


Anatoly Podgoretsky   (2008-11-04 15:17:00) [20]


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

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо