Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Inf_2.doc
Скачиваний:
2
Добавлен:
01.07.2025
Размер:
265 Кб
Скачать
☆

Класс tScreen

Этот компонент представляет свойства дисплея (в Windows 98 и 2000 — нескольких дисплеев), на котором выполняется приложение. Поскольку экземпляр данного класса только один (он создается системой при запуске приложения), то большинство методов и свойств имеют информационный характер и недоступны для записи.

Курсор приложения, общий для всех форм, доступен через свойство:

property Cursor: TCursor;

Часто приходится включать "песочные часы" на время выполнения длительной операции. Правильнее всего это сделать следующим образом:

Screen.Cursor := crHourglass;

try

{Calculations... } finally

Screen.Cursor := crDefauit;

end;

Имеется список всех курсоров. Получить дескриптор курсора с индексом index можно при помощи свойства:

property Cursors[Index: Integer]: HCURSOR;

Напомним, что индексы зарегистрированных курсоров лежат в диапазоне от -22 (crSizeAll) до 0 (crDefauit).

Рассмотренный ниже фрагмент кода при инициализации формы заносит имена всех зарегистрированных в системе курсоров в список ListBoxl. Затем, при выборе элемента списка, устанавливается соответствующий ему курсор:

procedure TForml.FormCreate(Sender: TObject);

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 поставляется модуль multimun. pas, содержащий прототипы структур и функций Windows 98/2000 для работы с многими мониторами.

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

property PixelsPerInch: Integer;

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

property Forms[Index: Integer]: TForm;

property FormCount: Integer;

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

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

property ActiveControl: TWinControl;

property ActiveForm: TForm;

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

property OnActiveControlChange: TNotifyEvent;

property OnActiveFormChange: TNotifyEvent;

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

property DefaultKbLayout: HKL;

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

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

var RusLayout, EngLayout : THandle;

procedure TMainForm. FomCreate (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 = LAMG_RUSSIAN then RusLayout := Layouts[i]

else if LoWord(Layouts[i]) and $FF = LANG_ENGLISH then EngLayout := Layouts[i];

// если есть, включим русскую

if RusLayoutOO then ActivateKeyboardLayout(RusLayout,0);

end;

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

procedure TMainForm.EditDocSerEnterfSender: TObject);

begin

if EngLayoutoO then ActivateKeyboardLayout(EngLayout,0);

end;

procedure TMainForm.EditDocSerExit(Sender: TObject);

begin

if RusLayoutoO then ActivateKeyboardLayout(RusLayout,0);

end;

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