Уроки 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;
Без применения последнего оператора мы получим сразу готовый график функции, и даже применение оператора задержки перед выводом очередной точки не поможет.
В начало урока
|