Класс 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;

 


Знаете ли Вы, как разрешается парадокс Ольберса?
(Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды.
Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМА

Форум Рыцари теории эфира


Рыцари теории эфира
 10.11.2021 - 12:37: ПЕРСОНАЛИИ - Personalias -> WHO IS WHO - КТО ЕСТЬ КТО - Карим_Хайдаров.
10.11.2021 - 12:36: СОВЕСТЬ - Conscience -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
10.11.2021 - 12:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от д.м.н. Александра Алексеевича Редько - Карим_Хайдаров.
10.11.2021 - 12:35: ЭКОЛОГИЯ - Ecology -> Биологическая безопасность населения - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
10.11.2021 - 12:34: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> ПРАВОСУДИЯ.НЕТ - Карим_Хайдаров.
10.11.2021 - 12:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вадима Глогера, США - Карим_Хайдаров.
10.11.2021 - 09:18: НОВЫЕ ТЕХНОЛОГИИ - New Technologies -> Волновая генетика Петра Гаряева, 5G-контроль и управление - Карим_Хайдаров.
10.11.2021 - 09:18: ЭКОЛОГИЯ - Ecology -> ЭКОЛОГИЯ ДЛЯ ВСЕХ - Карим_Хайдаров.
10.11.2021 - 09:16: ЭКОЛОГИЯ - Ecology -> ПРОБЛЕМЫ МЕДИЦИНЫ - Карим_Хайдаров.
10.11.2021 - 09:15: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Екатерины Коваленко - Карим_Хайдаров.
10.11.2021 - 09:13: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вильгельма Варкентина - Карим_Хайдаров.
Bourabai Research - Технологии XXI века Bourabai Research Institution