Иллюстрированный самоучитель по Delphi 7 для профессионалов

Класс TScreen

Все координаты отсчитываются от верхнего левого угла первого монитора. Если монитор один, значения этих свойств совпадают с Left, Top, width и Height.

Примечание
С исходными текстами Delphi 5 поставляется модуль MULTIMON.PAS, содержащий прототипы структур и функций Windows 98, 2000 для работы со многими мониторами
.

Число точек на дюйм дисплея содержится в свойстве:

property PixelsPerlnch: Integer;

При появлении каждая форма заносит себя в список форм глобального объекта screen. Два (доступных только для чтения) свойства дают информацию об этом списке:

property Forms[Index: Integer]: TForm;
property FormCount: Integer;

Нужно иметь в виду, что в списке указаны только формы, открытые приложением, а не все окна системы.

Следующие два свойства указывают на активную в данный момент форму и ее активный элемент управления:

property ActiveControl: TWinControl;
property ActlveForm: TForm;

При их изменении генерируются, соответственно, события:

property OnActiveControlChange: TNotifyEvent;
property OnActiveFormChange: TNotifyEvent;

Хотя и "некстати", расскажем здесь о свойстве:

property DefaultKbLayout: HKL;

Оно указывает на раскладку клавиатуры, принятую в системе по умолчанию. Часто раскладку клавиатуры нужно переключать программно, чтобы облегчить жизнь пользователю. Так, в приложении, в котором надо быстро вводить в базу данных большой объем информации на русском и английском языках, такое переключение при смене полей просто необходимо.

Сначала следует прочитать список имеющихся в системе раскладок и установить нужную:

var RusLayout, EngLayout: THandle;
procedure TMainForm.FormCreate(Sender: TObject);
var Layouts: array[0..7] of THandle; i,n: Integer;
begin
// Считывание раскладок RusLayout: = 0; EngLayout: = 0;
n: = GetKeyboardLayoutList(High(Layouts)+1, Layouts);
if n>0 then
for i: = 0 to n-1 do
if LoWord(Layouts[i]) and $FF = LANG_RUSSIAN then
RusLayout: = Layouts[i] else if LoWord(Layouts [i])
 and $FF = LANG_ENGLISH then EngLayout: = Layouts[i];
// Если есть, включим русскую
if RusLayout<>0 then ActivateKeyboardLayout(RusLayout,0);
end;

Затем при входе в определенное поле (компонент редактирования данных) и выходе из него можно программно сменить раскладку:

procedure TMainForm.EditDocSerEnter(Sender: TObject);
begin
if EngLayout<>0 then ActivateKeyboardLayout(EngLayout, 0);
end;
procedure TMainForm.EditDocSerExit(Sender: TObject};
begin
if RusLayout<>0 then ActivateKeyboardLayout(RusLayout,0);
end;
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.