Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование на Pascal / Delphi / Справочник по компонентам Delphi.doc
Скачиваний:
148
Добавлен:
02.05.2014
Размер:
1 Mб
Скачать

Управление дочерними элементами

Если вы хотите передать фокус одной из форм проекта, используйте метод этой формы:

procedure SetFocus;

Форма при этом обязана быть видимой и активной (Enabled), иначе создается исключительная ситуация EInvalidOperation.

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

procedure FocusControl(Control: TWinControl);

передает фокус элементу управления Control, а метод

procedure DefocusControl(Control: TWinControl; Removing: Boolean);

отбирает его. Параметр Removing, равный True, означает, что элемент при этом должен передать фокус своему родительскому элементу. Напомним, что для элементов в эти моменты генерируются события OnEnter и OnExit. Имеющий фокус элемент определяется свойством:

(РЁ) property ActiveControl: TWinControl;

Оно может принимать значение nil, если фокус имеет сама форма.

В компоненте TForm доступен еще один метод, по предназначению сходный с FocusControl:

function SetFocusedControl(Control: TWinControl): Boolean;

Этот метод вызывается внутри многих компонентов (находящихся вне модуля FORMS) при получении фокуса ввода — именно поэтому он находится в секции public. Программисту не стоит его использовать, т. к. он не доку­ментирован.

Форма относится к компонентам с возможностью прокрутки содержимого клиентской области. К полосам прокрутки можно обратиться как к отдельным объектам с помощью свойств:

(pb) property HorzScrollBar;

(Pis) property VertScrollBar;

Если все элементы управления не могут быть видны при данных размерах формы, она может быть снабжена полосами прокрутки автоматически. Это происходит, если свойство

(Pb) property AutoScroll;

установлено в значение True. Следующий метод помещает элемент управления AControl в видимую часть клиентской области:

procedure ScrollInView(AControl: TControl);

Он изменяет, если необходимо, положение бегунков полос прокрутки. При передаче фокуса между элементами управления формы те из них, которые находятся вне ее видимой части, автоматически вызывают этот метод.

Форма имеет возможность перехватить ввод от клавиатуры, предназначенный имеющему фокус элементу управления. Установка свойства

(Pb) property KeyPreview: Boolean;

в True означает, что поступающие от клавиатуры сообщения будут сначала поступать форме, и только затем — элементу. Пример использования этой возможности приведен в разделе "Обработка событий от мыши и клавиатуры".

Немаловажной проблемой является то, как заставить форму и ее элементы выглядеть одинаково при различных режимах работы видеоадаптера. Текущую разрешающую способность в точках на дюйм можно задать при помощи свойства:

(Pb) property PixelsPerInch: Integer;

Вы можете присвоить этому свойству любое значение, превышающее 36, либо 0.

При ненулевом значении этого свойства во время создания форма и все ее элементы масштабируются в некоторой пропорции. Эта пропорция равна отно­шению числа точек на дюйм на экране в данный момент к этому же числу во время разработки. Если же PixelsPerInch = 0, никакого масштабирования не производится.

Чтобы не изменять PixelsPerInch напрямую, разработчики предусмотрели дру­гое — обобщающее — свойство:

(Pb) property Scaled: Boolean;

При установке Scaled в False PixelsPerInch обнуляется, в True — получает новое значение, равное числу точек на дюйм на экране в текущем видеорежиме.

Нужно учитывать, что если вы хотите сделать приложение, независимое от разрешения экрана, то значение свойства Position у всех его форм должно отличаться от poDesigned — иначе они будут появляться в разных местах (в том числе и за пределами экрана).

Внешний вид формы и ее составных частей можно отобразить не только на экране. Метод

function GetForrnImage: TBitmap;

возвращает "моментальный снимок" формы — битовую карту с ее изобра­жением. Печать на принтере изображения формы, полученного при помощи GetFormImage, осуществляется методом:

procedure Print;

Полученное изображение передается объекту TPrinter (см. ниже), при этом его масштабирование производится в соответствии со значением свойства:

(Pb) property PrintScale: TPrintScale;

TPrintScale = (poNone, poProportional, poPrintToFit) ;

poNone — отсутствует;

poProportional — производится изменение масштаба в пропорции, равной соотношению точек на дюйм у формы и принтера;

poPrintToFit — аналогично предыдущему, но осуществляется приведение размера изображения к размеру листа.

Свойства форм MDI

На базе TForm можно создавать специфические виды форм. Перечисленные ниже свойства и методы работают только в главных окнах приложений MDI.

(ро) property ClientHandle: HWND; procedure Arrangelcons;

Содержит дескриптор клиентского окна (для главного окна MDI).

Упорядочивает расположение сверну­тых в значок дочерних форм MDI.

procedure Cascade;

Располагает дочерние формы MDI каскадом.

procedure Tilet-property TileMode: TTiieMode; TTileMode = (tbHorizontal, tbVertical) ;

Располагает дочерние формы MDI мозаикой. Стиль определяется свой­ством TileMode.

Определяет стиль расположения дочер­них форм — вертикальный или горизон­тальный.

Передает фокус следующей форме в списке дочерних форм.

procedure Previous; ($o) property ActiveMDIChild: TForm;

Передает фокус предыдущей форме в списке дочерних форм.

Содержит указатель на активную дочер­нюю форму.

(Ro) property MDIChildren[I: Integer]: TForm;

Определяет количество дочерних форм.

Содержит указатель на 1-тую дочернюю форму.

(Pb) property WindowMenu: TMenuItem;

Указывает на тот пункт меню, к которому достраивается список имен дочерних форм.

Функции из модуля FORMS

В модуле FORMS (где описан класс Они важны для понимания взаимодейс!

Топп) содержится также ряд функций. пвия формы и ее дочерних компонентов.

function GetParentForm(Control: TControl) : TForm;

Возвращает указатель на форму, которой принадлежит элемент управления Control.

function ValidParentForm(Control: TControL): TForm;

Делает то же, что и предыдущая функция, при этом, если форма не найдена, возникает исключительная ситуация EInvalidOperation.

function DisableTaskWindows(ActiveWindow: HWnd) : Pointer;

Переводит в неактивное состояние все окна, кроме ActiveWindow. Эта функция возвращает копию исходного списка окон (TaskWindowList).

procedure EnableTaskWindows(WindowList: Pointer);

Используется в паре с предыдущей функцией. Получив созданный ею список окон, переведенных в неактивное состо­яние, EnableTaskWindows активизирует все окна (через вызов функции API EnableWindow) и очищает список. Такой прием необходим при создании модальных окон и управлении ими, например, внутри метода MessageBox.

function AllocateHWnd(Method: TWndMethod) : HWND;

Создает экземпляр окна вспомогательного класса TPUtilWindow (не путать с классом как понятием объектно-ориентированного программирования), обработчиком сооб­щений у которого служит метод Method.

procedure DeallocateHWnd(Wnd: HWND) ;

Уничтожает созданный предыдущей функ­цией экземпляр окна.

function IsAccel(VK: Word; const Str: string): Boolean;

Проверяет, является ли символ VK аксе­лератором для текстовой строки Str. Функция возвращает True, если в строке содержится сочетание & ' VK '.

function KeysToShiftState(Keys: Word) : TShiftState;

Преобразует флаги состояния клавиатуры и кнопок мыши из типа MKSHIFT, MKLBUTTON в принятый в Delphi тип TShiftState.

function KeyDataToShiftState(KeyData: Longint): TShiftState;

Производит аналогичное преобразование из виртуальных кодов клавиш Windows (например, типа VKSHIFT).

Соседние файлы в папке Delphi