
- •Initialize - инициализирует приложение в целом, при этом также выполняются операторы раздела initialization всех модулей приложения.
- •Путь и имя исполнимого файла
- •Подключение к приложению файла справки
- •Вывод всплывающей подсказки
- •Инструкции ProcessMessages и Edit1.Refresh
- •Событие OnIdle
- •Раскладка клавиатуры
- •Объект Screen
- •Задание вида курсора
- •Вывод списка шрифтов
Событие 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.