Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

не работает сторока Image1.Visible:=true; [D7, XP]


Dima21   (10.09.17 08:50

Здравствуйте!!! Не могу понять - почему не срабатывает комманда для отображения анимации?

есть таймер (работающий постоянно) и картинка (анимированная - gif) -
в теле программы при нажатии на кнопку Button5 анимация не отображается:

procedure TForm1.Button5Click(Sender: TObject);
..........................
Screen.Cursor:=crHourGlass; //работает
StatusBarPro1.Panels.Items[0].Text:='!!!!!!!!!!!!!'; //работает
Image1.Visible:=true; // не работает
.........................
//сдесь идет цикл работы с файлами ( может занимать до 15 сек) //работает
........................
Image1.Visible:=false; //работает
StatusBarPro1.Panels.Items[0].Text:='!!!!!!!!!222222222'; //работает
Screen.Cursor:=crDefault; //работает

А если я нажму отдельно кнопку - то работает:

procedure TForm1.Button10Click(Sender: TObject);
begin
image1.Visible:=true;
end;

Пробовал добавлять перед циклом sleep(5000); и button10.click; вместо image1.Visible:=true; и не чего не вышло!
Буду благодарен за помощь или подсказку. Заранее спасибо!


ВладОшин ©   (10.09.17 09:19[1]

Пробовал добавлять перед циклом sleep(5000)

а перед слипом еще добавь Image1.Repaint или рефреш, или что там у него есть


ВладОшин ©   (10.09.17 09:36[2]

если не поможет RePaint
Application.ProcessMessage или RePaint всей форме


Игорь Шевченко ©   (10.09.17 10:54[3]

ВладОшин ©   (10.09.17 09:19) [1]

Никогда ты не будешь майором.

Dima21   (10.09.17 08:50)  

Не надо писать такой код. Картинка не успевает показаться, потому что приложение занято работой с файлами.
Можно принудительно обновить картинку, сказав ей Image1.Update и Application.ProcessMessages сразу после того, как изменяется ее видимость, но это костыли. Правильно делать длинную обработку в отдельных потоках, чтобы не подвисал интерфейс пользователя.


Dima21   (10.09.17 11:36[4]

Огромное спасибо всем!!!! Буду пробовать.


ВладОшин ©   (10.09.17 19:42[5]


> Игорь Шевченко ©   (10.09.17 10:54) [3]


> длинную обработку в отдельных потоках,

угу, автор уже это пошел делать, так и "видю"

майора мне не надо
или солдат или фельдмаршал )


Dima21   (11.09.17 14:42[6]

Мне все таки подошел вариант с одним потоком - использовать Application.ProcessMessages. Этого мне достаточно. Всем еще раз - Огромное спасибо!!!


Германн ©   (12.09.17 01:25[7]


> Dima21   (11.09.17 14:42) [6]
>
> Мне все таки подошел вариант с одним потоком - использовать
> Application.ProcessMessages.

Имхо, как всегда идём по пути Черномырдина.
А вызвать Image1.Repaint сразу после
Image1.Visible:=true; // не работает
не работает?
Зачем бить из пушки по всем воробьям, если достаточно поразить только одного, коонкретного?


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо