Конференция "Начинающим" » не работает сторока Image1.Visible:=true; [D7, XP]
 
  • Dima21 (10.09.17 08:50) [0]
    Здравствуйте!!! Не могу понять - почему не срабатывает комманда для отображения анимации?

    есть таймер (работающий постоянно) и картинка (анимированная - 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; // не работает
    не работает?
    Зачем бить из пушки по всем воробьям, если достаточно поразить только одного, коонкретного?
 
Конференция "Начинающим" » не работает сторока Image1.Visible:=true; [D7, XP]
Есть новые Нет новых   [118604   +26][b:0][p:0]