Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.01.2017, 09:05   #1
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию Зависает анимация

У меня проблема появилась с тем, что анимация при выполнении sql запроса, просто не двигается ....
Пользователь нажимает кнопку, я показываю компонент (Image1.visible:=true), картинка показывается.
Сразу после этого выполняю большой запрос, и вся моя программа "зависает" вместе с анимацией ...
После выполнения запроса, всё начинает работать нормально.
Не могли бы мне, подсказать.
Как лучше всего поступить в данной ситуации?
я думал использовать потоки, но так и не сообразил как их лучше применить ...
p.s.
Для анимации использовал: GIFImage
Использую: delphi 7
СУБД: ms sql 2005

Последний раз редактировалось Janger; 26.01.2017 в 09:08.
Janger вне форума Ответить с цитированием
Старый 26.01.2017, 10:40   #2
Artsiom
Форумчанин
 
Аватар для Artsiom
 
Регистрация: 13.07.2012
Сообщений: 357
По умолчанию

Цитата:
Сообщение от Janger Посмотреть сообщение
Пользователь нажимает кнопку
и запускается поток, где
Цитата:
Сообщение от Janger Посмотреть сообщение
я показываю компонент (Image1.visible:=true), картинка показывается
Или
Цитата:
Сообщение от Janger Посмотреть сообщение
Пользователь нажимает кнопку
и запускается поток, где
Цитата:
Сообщение от Janger Посмотреть сообщение
выполняю большой запрос
Примерно так:
Пользователь нажимает кнопку пробела
Код:
procedure TMainFormRG.FormKeyPress(Sender: TObject; var Key: Char);
begin
  case Key of
    #32 : StartGame();//VK_SPACE
    #27 : Application.Terminate;//VK_ESC
  end;
end;
Создаю и запускаю.
Код:
procedure TMainFormRG.StartGame();
begin
  MainRexThread := RexThread.Create(True);
  MainRexThread.Priority := tpTimeCritical;
  MainRexThread.Resume;
end;
Процедура самого потока. Там цикл, где и вывожу 2 битмапа.
Код:
procedure RexThread.Execute;
begin

    while not MainRexThread.Terminated do
    begin

        Synchronize(  //левой
          procedure
          begin
            MainFormRG.MainImageRex.Canvas.Draw(coordX, 126, btmLeftLeg);
          end);
        Sleep(250);

        Synchronize(RexClean);

        Synchronize(  //правой
          procedure
          begin
            MainFormRG.MainImageRex.Canvas.Draw(coordX, 126, btmRigthLeg);
          end);
        Sleep(250);

        Synchronize(RexClean);
      end;

end;
При этом главная форма не виснет и реагирует на клавиши.
Пример конечно не очень корректен, но вроде как подойдёт.
Думаю вариант: Пользователь нажимает кнопку и запускается поток, где выполняю большой запрос.
будет ОК.

Последний раз редактировалось Artsiom; 26.01.2017 в 10:47.
Artsiom вне форума Ответить с цитированием
Старый 26.01.2017, 11:23   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

TAnimate асинхронный же, ток там avi нужен и если XPManifest есть, то асинхронности нет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.01.2017, 09:57   #4
Janger
Форумчанин
 
Регистрация: 28.09.2011
Сообщений: 250
По умолчанию

Artsiom,
спасибо огромное!
всё работает, даже лучше чем я думал!!!
просто огромнейший респект
Janger вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
зависает ноут alex(21) Безопасность, Шифрование 5 23.05.2012 14:32
Зависает программа Symba Общие вопросы Delphi 10 24.06.2011 11:48
зависает Project1 divwond Общие вопросы Delphi 11 20.02.2011 00:30
Зависает цикл while fezilk24 Общие вопросы Delphi 13 12.06.2010 17:14
Функция зависает lobz1k Общие вопросы C/C++ 1 18.05.2010 05:05