Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.12.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.006 c
15-1223400210
Nic
2008-10-07 21:23
2008.12.14
Turbo Pascal 7.1


2-1225894334
svb
2008-11-05 17:12
2008.12.14
из Excel в DBEhgrid


2-1225628386
programmer90
2008-11-02 15:19
2008.12.14
Запуск флеш-заставки вместо сплэш скрина


4-1202161064
GanibalLector
2008-02-05 00:37
2008.12.14
RAS, TAPI или WinApi


2-1225881533
J.S.
2008-11-05 13:38
2008.12.14
упорядочить строки массива





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский