unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private{ Private-Deklarationen }public{ Public-Deklarationen }procedure MyIdleHandler(Sender: TObject; var done: Boolean);
end;
var
Form1: TForm1;
implementation{$R *.dfm}{ TForm1 }procedure TForm1.MyIdleHandler(Sender: TObject; var done: Boolean);
begin// do something here // hier irgendwas tun
Self.Left := Random(Screen.Width - Self.Width);
Self.Top := Random(Screen.Height - Self.Height);
Edit1.Text := TimeToStr(now);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
dt, dtn: TDateTime;
begin// simulate heavy calculatin with this button // umfangreiche Berechnungen simulieren
dt := Now;
repeat
dtn := Now;
until dtn > (dt + 10 / 3600 / 24);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin// assign the Handler to OnIdle of the Application // den Handler dem OnIdle von Application zuweisen
Application.OnIdle := MyIdleHandler;
end;
end.
Код написан на языке программирования Delphi, который был впервые выпущен Borland в 1991 году.
Программа создает простой графический пользовательский интерфейс (GUI) с формой, кнопкой и полем ввода. Когда кнопка нажата, она симулирует тяжелые расчеты, повторно проверяя текущее время, пока не пройдут 10 секунд. Это simulates задачу, которая может вызвать замораживание или нереспонсивность приложения.
Процедура MyIdleHandler назначается как обработчик события для события OnIdle приложения. Событие OnIdle триггерируется, когда приложение не имеет pending сообщений в очереди сообщений, что означает, что оно может выполнять задачи в фоновом режиме.
В процедуре MyIdleHandler форма перемещается на случайное местоположение на экране, а поле ввода обновляется текущим временем. Это код будет работать всякий раз, когда приложение находится в состоянии простоя, что может быть, когда пользователь не взаимодействует с GUI или когда нет pending сообщений в очереди.
Пример работы этого кода:
Программа запускается и создает форму с кнопкой и полем ввода.
Пользователь нажимает кнопку для симуляции тяжелых расчетов.
Программа выполняет эти расчеты, повторно проверяя текущее время, пока не пройдут 10 секунд.
В это время приложение занято и может не отвечать на другие события или взаимодействовать с пользователем.
После выполнения расчетов программа назначает себя как обработчик простоя, используя Application.OnIdle := MyIdleHandler;.
Приложение вновь становится простым, и процедура MyIdleHandler триггерируется.
В этой процедуре форма перемещается на случайное местоположение на экране, а поле ввода обновляется текущим временем.
Этот код демонстрирует, как можно использовать событие OnIdle для выполнения задач в фоновом режиме в приложениях Delphi.
В статье описывается, как выполнить код приостановленного приложения с помощью обработчика события OnIdle в Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.