256   __________________________________________Глава 4

Теперь рассмотрим последовательность событий при двойном щелчке на ком
поненте. Она приведена в таблице 4.2. Распознавать нажатую кнопку мыши
по-прежнему можно только в событиях OnMouseDown и OnMouseUp. Если же
надо распознать именно двойной щелчок какой-то определенной кнопкой мыши, j
то можно, например, ввести некую переменную, являющуюся флагом двойного
щелчка, устанавливать этот флаг в обработчике события OnDblClick, а в обработ-
чиках событий OnMouseDown или OnMouseUp проверять этот флаг и, если он
установлен, то сбрасывать его и выполнять запланированные действия.

Таблица 4.2. Последовательность событий мыши при двойном щелчке |
на компоненте '

Действие пользователя_______i Событие     __________________

1 Первое нажатие кнопки мыши    i OnMouseDown. Возможно распознавание    |
|                               ' нажатой кнопки и координат курсора      j

_________________I мыши_____________'____________   ^

Первое отпускание кнопки мыши OnClick                              ; •

OnMouseUp. Возможно распознавание на- i •

_______________________жатой кнопки и координат курсора мыши  f

Второе нажатие кнопки мыши     OnDblClick                           : i

OnMouseDown. Возможно распознавание    J
нажатой кнопки и координат курсора      '
мыши                                 i

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

4.3.1.2 Распознавание источника события, нажатых кнопок и клавиш,  j
координат курсора

Во все обработчики событий, связанных с манипуляциями мыши (как и во все
другие обработчики) передается параметр Sender типа указателя на TObject. Этот
параметр содержит указатель на компонент, в котором произошло событие. Он не
требуется, если пишется обработчик события для одного конкретного компонента.
Однако часто один обработчик применяется для нескольких компонентов. При I
этом какие-то операции могут быть общими для любых источников события, а ка- '
кие-то требовать специфических действий. Тогда Sender можно использовать для
распознания источника события. Правда, поскольку тип TObject не имеет ника-
ких полезных для пользователя свойств и методов, то объект Sender следует рас- |
сматривать как объект одного из производных от TObject типов.

Операции, связанные с обработкой параметра Sender, подробно рассмотрены в ;

главе 1 в разделе 1.6.6.2. Там показано, как можно распознать объект, на который
указывает Sender, по имени, узнать его класс, определить, является ли этот класс
наследником какого-то другого определенного класса.

Если требуется распознать только тип объекта, можно использовать функцию »
ClassNameIs. Например, оператор:                                          |

if (Sender->ClassNameIs("TListBox"))                                    |

проверяет, не является ли источник события компонентом типа TListBox.       '
Если требуется распознать источник события по имени компонента или друго-
му его свойству, можно использовать операцию явного приведения типа указателя ,
к указателю на объект определенного класса. Например, оператор              J