|
Класс TScreen
Этот компонент представляет свойства
дисплея (в Windows 98 и 2000 — нескольких дисплеев),
на котором выполняется приложение. Поскольку экземпляр
данного класса только один (он создается системой при
запуске приложения), то большинство методов и свойств
имеют информационный характер и недоступны для записи.
Курсор приложения, общий для всех форм,
доступен через свойство
property Cursor:
TCursor;
Часто приходится включать "песочные
часы" на время выполнения длительной операции.
Правильнее всего это сделать следующим образом:
Screen.Cursor :=
crHourglass;
try
{Calculations...}
finally
Screen.Cursor :=
crDefault;
end;
Имеется список всех курсоров. Получить
дескриптор курсора с индексом index
можно при помощи свойства:
property Cursors[Index:
Integer]: HCURSOR;
Напомним, что индексы зарегистрированных
курсоров лежат в диапазоне от —22 (crSizeAll)
до 0 (crDefault).
Рассмотренный ниже фрагмент кода при
инициализации формы заносит имена всех зарегистрированных
в системе курсоров в список ListBoxl.
Затем при выборе элемента списка устанавливается соответствующий
ему курсор:
procedure TForml.FormCreate(Sender:
TObj ect);
type
TGetStrFunc = function(const
Value: string): Integer of object;
var
CursorNames: TStringList;
AddValue: TGetStrFunc;
begin
CursorNames := TStringList.Create;
AddValue := CursorNames.Add;
GetCursorValues(TGetStrProc(AddValue));
ListBoxl.Items.Assign(CursorNames);
end;
procedure TForml.ListBoxlClick(Sender:
TObject);
begin
Screen.Cursor :=
StringToCursor(ListBoxl.Items
[ListBoxl.Itemlndex]);
end;
список курсоров, функции GetCursorValues,
StringToCursor и некоторые другие
содержатся в модуле CONTROLS.PAS.
Имена всех установленных в системе
шрифтов помещаются в список, определенный в свойстве
property Fonts: TStrings;
Компонент сообщает неизменяемые свойства
экрана (в данном видеорежиме). Его размеры в пикселах
определены в свойствах
property Height:
Integer; property Width: Integer;
В последних версиях ОС Microsoft имеется
поддержка отображения на нескольких мониторах одновременно.
Для этой цели предусмотрены свойства
property MonitorCount:
Integer;
property Monitors[Index:
Integer]: TMonitor;
Каждый компонент TMonitor
несет информацию о размерах и положении изображения
на нем. Образовавшийся же виртуальный рабочий стол характеризуется
следующими свойствами:
property DesktopLeft:
Integer; property DesktopTop: Integer; property DesktopWidth:
Integer; property DesktopHeight: Integer;
Все координаты отсчитываются от верхнего
левого угла первого монитора. Если монитор один, значения
этих свойств совпадают с 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;
|