Я пытаюсь создать собственный элемент управления Firemonkey, который наследуется от элемента управления TListView
. Я хочу добавить некоторую функциональность в элемент управления, который автоматически выполняется, когда пользователь нажимает на элемент управления. Поэтому моя цель НЕ состоит в том, чтобы указать метод OnItemClick
в форме моего элемента управления, а скорее в том, чтобы добавить функциональность непосредственно в сам элемент управления.
Я изо всех сил пытаюсь понять, что мне нужно сделать, чтобы подключиться к обработчику кликов для TListView
. В моей голове я представляю, что мое решение будет выглядеть примерно так:
//somewhere in the base TListView code
void __fastcall TListView::ClickHandler()
{
//logic for handling a click on the list view
}
//somewhere in my custom list view control
void __fastcall TMyListView::ClickHandler()
{
TListView::ClickHandler(); //call base click handler so all the normal stuff happens
//my additional logic goes here
}
Тем не менее, я не могу найти в документации ничего о том, какой метод я должен попытаться переопределить или как я вообще должен это делать.
Я нашел эту информацию о вызове обработчика Click-event. Я создал простой пример следующим образом:
void __fastcall TFmListView::Click()
{
ShowMessage("This is the control's click");
}
Это отлично работает, однако согласно документации:
Если пользователь назначил обработчик событию OnClick элемента управления, щелчок по элементу управления приводит к вызову этого метода.
Следовательно, любая дополнительная логика, которую я поместил в метод Click()
элемента управления, будет потеряна, если будет установлено одно из свойств элемента управления по событию щелчка.
Каков правильный способ расширить функциональность того, что происходит при нажатии пользовательского элемента управления?
Click()
, который вызывает обработчикOnClick
, если он назначен. Если пользователь назначает обработчикOnClick
, а вы переопределяетеClick()
, обработчик пользователя не будет вызываться, пока вашClick()
не вызовет базовый классClick()
. Это позволяет вам действовать в дополнение к коду пользователя, решать, будет ли ваш код выполняться до или после кода пользователя, и даже пропускать код пользователя. - person Remy Lebeau   schedule 31.10.2015