Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л.р.№1 ооп.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
111.62 Кб
Скачать

Событие OnIdle

Наиболее часто используются события OnIdle, OnException и OnHint объекта – приложения.

Событие OnIdle типа TIdleEvent возникает при простое приложения. для кодирования действий приложения, когда оно находится в режиме ожидания работы, используется обработчик события ОnIdle. Операции, включенные в этот обработчик, выполняются каждый раз, когда приложение заканчивает текущую работу и переходит в режим простоя. Код обработчика события не должен быть большим и требовать много времени на выполнение, т. к. это приведет к замедлению работы приложения в целом.

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

procedure TForml.ApplicationEventslldle(Sender: TObject; var Done: Boolean);

begin

if Application.Active

then Forml.Caption :=’Приложение активно

else Forml.Caption :=’Приложение неактивно’;

end;

выполняется проверка активности приложения, что отмечается в заголовке формы Form1.

Если компонент ApplicationEvents не используется, то обработчики событий объекта-приложения можно кодировать по следующей технологии:

1. В классе какой-либо формы (обычно главной) указать заголовок процедуры-обработчика.

2. В разделе implementation модуля формы описать процедуру - обработчик.

З. В методе FormCreate создания формы назначить созданную процедуру обработчиком соответствующего события.

Указанные действия являются типовыми при написании собственных обработчиков событий, и их рассмотрение позволяет лучше понять технику обработки событий, реализованную в Delphi.

Например, при использовании события OnIdle для проверки активности приложения в код модуля Unit1 формы Form1 нужно внести следующие изменения:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

procedure FormCreate(Sender: TObject);

//заголовок процедуры-обработчика OnIdle

procedure IdleWork (Sender: TObject; var Done: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

//Установка обработчика события

procedure TForm1.FormCreate(Sender: TObject);

begin

Application.OnIdle:= IdleWork;

end;

//Обработчик события

procedure Tform1.IdleWork(Sender: Tobject; var Done: Boolean);

begin

if Application.Active

then form1.Caption:=’Приложение активно

else form1.Caption:=’Приложение неактивно’;

end;

end.

Раскладка клавиатуры

При запуске приложения для него и всех его форм устанавливается раскладка клавиатуры, заданная в Windows по умолчанию. Пользователь выбирает нужную раскладку с помощью комбинации клавиш или значка в правом углу панели задач. Разработчик может переключать раскладку клавиатуры программным способом, что может быть удобно в случае, когда, например, для приложения устанавливается русская раскладка независимо от раскладки по умолчаниюWindows. Получить список установленных для раскладок клавиатуры и активизировать в приложении одну из доступных раскладок можно с помощью АРI – функций GetKeyboardLayoutList и ActivateKeyboardLayout.

Функция GetKeyboardLayoutList (nbuff:integer; var List)получает список раскладок клавиатуры и заносит его в массив, указанный параметром List. Параметр nbuff задает размер (число элементов) массива, получающего список раскладок. Функция возвращает число раскладок клавиатуры, установленных на компьютере.

Функция ActivateKeyboardLayout (hkl: HKL, Flags: UINT) устанавливает раскладку, заданную параметром hkl; параметр Flags обычно не нужен. В случае успешного выполнения функция возвращает предыдущую раскладку клавиатуры и ноль — в случае ошибки.

Пример:

var rl el: THandle;

Layouts: array [O. .7] of THandle;

n: integer;

// получение списка раскладок

procedure TForml.ButtonlClick(Sender: TObject);

var i: integer;

begin

rl := 0; el := 0;

n := GetKeyboardLayoutList(High(Layouts) + 1, Layouts>;

for I := 0 to n-1 do begin

if LoWord(Layouts[i)) and $FF = Lang_Russian then rl := Layouts Ii];

if LoWord(Layouts[i]) and $FF = Lang_English then el := Layouts[i);

end;

end;

// установка русской раскладки

procedure TForml.ButtonlClick(Sender: TObject);

begin

if rl <> 0 then ActivateKeyboardLayout(rl, 0);

end;

//установка английской расскладки

procedure TForml.Button2Click(Sender: TObject);

begin

if el <> 0 then ActivateKeyboardLayout(el, 0);

end;

Для определения раскладки, установленной по умолчанию, можно использовать свойство DefaultKbLayout объекта Screen.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]