|
Вопрос # 313/ вопрос решён / |
|
Уважаемые експерти объясните, как действует
LoadFromFile. Моя программа должна загружать
одну картинку, ждать определенное время и загружать вторую. Но она сперва ждет
это время, потом моментально загружает одну
за другой картинки. Что делать?
Приложение: Переключить в обычный режим- form1.Image1.picture.LoadFromFile('1.jpg');
- t:=gettickcount;
- repeat
- T2:=gettickcount;
- until t2-t>2000;
- form1.Image1.picture.LoadFromFile('2.jpg');
 |
Вопрос задал: Бедзир Олександр (статус: Посетитель)
Вопрос отправлен: 13 февраля 2007, 23:07
Состояние вопроса: решён, ответов: 4.
|
Ответ #1. Отвечает эксперт: Сергей Устинов
Здравствуйте, Бедзир Олександр!
После отображения первой картинки вставьте процедуру
Form1.Repaint;
Удачи!
Приложение: Переключить в обычный режим- form1.Image1.picture.LoadFromFile('15.jpg');
- Form1.Repaint;
- t:=gettickcount;
- repeat
- T2:=gettickcount;
- until t2-t>2000;
- form1.Image1.picture.LoadFromFile('30.jpg');
 |
Ответ отправил: Сергей Устинов (статус: 2-ой класс)
Время отправки: 13 февраля 2007, 23:21
Оценка за ответ: 5
Комментарий к оценке: Спасибо работаєт
|
Ответ #2. Отвечает эксперт: Лукьяненко Алексей Валериевич
Вместо Repaint лучше вставить Application.ProcessMessages. Связано это с тем, что после загрузки содержимого файла компонент ничего не рисует, а прорисовка происходит при получении системного события WM_PAINT. Событие это будет обработано либо в ходе обработки Application.ProcessMessages, либо после окончания вашего кода (во время его обработки программа не реагирует ни на какие системные события)
 |
Ответ отправил: Лукьяненко Алексей Валериевич (статус: 1-ый класс)
Время отправки: 14 февраля 2007, 10:37
Оценка за ответ: 5
Комментарий к оценке: Спасибо тоже работает
|
Ответ #3. Отвечает эксперт: Вадим К
Это всё верно и хорошо, но есть одно но. Не рекомендую создавать процедур, которые будут выполнятся дольше нескольких десятих секунды, так как этим вы тормозите интерфес программы. Можно сделать поток, но для такой простой задачи это уж слишком. Хотя, если вы надумаете сделать 10 картинок + ко всему хитрую логику их перемешивания (например зависящую от фазы луны:)), то тут уж только поток мутить. И паузы получаться точными, и грузиться всё будет. В потоке можно и sleep написать без угрызения совести. Но в вашем случае рекомендую воспользоваться таймером. После первой загрузки картинки выставляете время для таймера, и запускаете его. В обработчике таймера пишете вначале остановку таймера и загрузку нужной второй картинки. Работать будет хорошо
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 14 февраля 2007, 12:53
|
Ответ #4. Отвечает эксперт: Косолапов Дмитрий Юрьевич
В дополнение к предыдущему ответу:
1) Вместо Form1.Repaint можно использовать Form1.Image1.Resresh
2) Вместо цикла достаточно воспользоваться процедурой Sleep, котороая ждет заданное количество миллисекунд.
Мини-форум вопроса
Всего сообщений: 1; последнее сообщение — 17 февраля 2007, 17:40; участников в обсуждении: 1.
|
Павлов Евгений Владимирович (статус: Посетитель), 17 февраля 2007, 17:40 [#1]:
В любом цикле цикле классического паскаля отображение объектов не выполняется так как нет обращения к верхним уровням то есть к форме и компонентам. Для этого можно использовать внутри цикла команду Update
|
31 января 2011, 19:58: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|