M Y D E L P H I 7 . R U Самоучитель программирования  
 
  • Главная
  •  

     

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