Проектирование графического интерфейса пользователя______________253

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

for (int i = 0; i < Panell->ControlCount; i++)

if (Panell->Controls[i]->InheritsFrom(_class id(TWinControl)))
((TWinControl *)Panell->Controls[i])->ScaleBy(11,10);

При этом надо иметь в виду, что непосредственно применять ScaleBy можно
только к оконным компонентам, являющимся наследниками класса TWinControl.
Поэтому в приведенном операторе сначала проверяется, является ли компонент
наследником TWinControl. Для этого к компоненту применяется функция Inhe-
ritsFrom, возвращающая true, если класс объекта наследует классу, передаваемо-
му в функцию как параметр. В данном случае в качестве параметра в функцию пе-
редается класс TWinControl, который преобразуется в нужную форму с помощью
ключевого слова _classid.

Если установлено, что компонент является оконным (его класс наследует
TWinControl), то к нему применяется функция ScaleBy, для чего используется яв-
ное приведение его типа к TWinControl: (TWinControl *).

Приведенный код масштабирует только оконные компоненты. Неоконные
компоненты, например, метки, масштабироваться не будут.

Подробнее функции и подходы, использованные в приведенном коде, рассмот-
рены в главе 1 в разделе 1.6.6.2.

. 4.3 Обработка событий клавиатуры и мыши

Все действия пользователя при взаимодействии с приложением сводятся к пе-
ремещению мыши, нажатию кнопок мыши и нажатию клавиш клавиатуры. Рас-
смотрим обработку в приложении событий, связанных с этими манипуляциями
пользователя.

4.3.1 События мыши

4.3.1.1 Последовательность событий

В компонентах C++Builder определен ряд событий, связанных с мышью. Это
события:

Событие      Описание                                      ___

,| OnClick        Щелчок мыши на компоненте и некоторые другие действия
пользователя.

OnDblClick    Двойной щелчок мыши на компоненте.

OnMouseDown Нажатие клавиши мыши над компонентом. Возможно распо-

;              знавание нажатой кнопки и координат курсора мыши.       ;

OnMouseMove Перемещении курсора мыши над компонентом. Возможно рас- !
познавание нажатой кнопки и координат курсора мыши.

OnMouseUp    Отпускание ранее нажатой кнопки мыши над компонентом.
'.              Возможно распознавание нажатой кнопки и координат курсо-
;              ра мыши.

JOnStartDrag   Начало процесса «перетаскивания» объекта. Возможно распо- i
[              знавание перетаскиваемого объекта,                        i