Объект Application

Метод Application.ProcessMessages




Уроки Delphi
  1.  Первая программа
  2.  Использование компонентов
  3.  События Delphi
  4.  Типы данных Delphi
  5.  Создание своих типов данных
  6.  Выражения и операторы
  7.  Работа с файлами в Delphi
  8.  Дополнительные формы
  9.  Подпрограммы в Delphi
  10. Исключительные ситуации
  11. Взаимодействие приложения с пользователем
  12. Указатели в Delphi
  13. Обзор компонентов
  14. Работа со строками
  15. Создание интерфейса
  16. Графика в Delphi
  17. Многопоточность в Delphi
  18. Динамическое создание
        компонентов
Поиск по сайту




 Это важно:
   Метод Application.ProcessMessages;

 Это полезно:
   Параметр Sender в обработчиках событий;










Бояться не надо



   Метод Application.ProcessMessages необходимо применять в динамичных приложениях, требующих немедленного отображения выполненных в программе действий. Для повышения быстродействия программы сообщения (Messages!), которые объект Application посылает объектам программы, этими объектами выполняются не сразу после получения, а по мере накопления некоторой очереди.

   Для иллюстрации работы метода Application.ProcessMessages рассмотрим процедуру, троекратным "мельканием" текста в строке ввода обращающего внимание пользователя на то, что данные не введены:

procedure TForm1.Button1Click(Sender: TObject);
 var i: Integer;
begin
 if Edit1.Text='' then
  begin
   for i:=1 to 3 do
    begin
      Edit1.Text:='Введите данные';
      //Application.ProcessMessages;
      sleep(300);
      Edit1.Text:='';
      //Application.ProcessMessages;
      sleep(300);
    end;
   Edit1.SetFocus;
  end;
end;

   Попробуйте выполнить приложение с закомментированными операторами Application.ProcessMessages, и вы никогда не увидите желаемого появления-исчезания текста. Программа идёт дальше, невзирая на то, что необходимые действия визуально не отражены на Форме. Теперь раскомментируйте - и желаемый эффект достигнут. Таким образом, метод Application.ProcessMessages заставляет программу немедленно отразить результат действия уже выполненных ею операторов.

   Аналогично, программа, выполняющая длительные вычисления, может выглядеть зависшей, так как даже сообщения на перемещение её окна или нажатия на кнопки не будут обработаны, пока вычисления не будут закончены. Поэтому нужно либо выполнять вычисления в отдельном потоке, либо периодически выполнять Application.ProcessMessages. Однако, в этом случае нужно учитывать, что выполнение этого метода несколько тормозит выполнение программы, и его вызов не должен быть слишком частым.

   Другой пример, связанный с работой с графикой в Delphi. Динамика построения графиков функций, когда график рисуется постепенно, по мере вычисления очередной точки, выглядит в программе очень эффектно. Чтобы добиться такого эффекта, также необходимо применять метод Application.ProcessMessages. Вычисляя положение очередной точки, нужно после её выведения на холст:

 Canvas.LineTo(X[n], Y[n]);
 sleep(200);


добавлять:

 Application.ProcessMessages;

   Без применения последнего оператора мы получим сразу готовый график функции, и даже применение оператора задержки перед выводом очередной точки не поможет.


В начало урока



Вопросы и комментарии (8)      Решение задач в Delphi

Оставить комментарий:

Имя  

Текст комментария