Класс TCard не имеет общедоступных событий OnShow и OnHide.

В приложении Delphi 10.4 VCL TCard (как элемент-контейнер TCardPanel) не имеет общедоступных событий OnShow и OnHide (как TTabSheet).

Следовательно, обработчик события TCard.OnEnter НЕ запускается, когда конкретный TCard АКТИВИРУЕТСЯ. Обработчик событий TCard.OnEnter запускается ТОЛЬКО, когда, например. нажав на элемент управления на TCard.

Пример кода:

CardPanel1.ActiveCard := Card2;

В этом случае событие TCard.OnEnter НЕ срабатывает!

Можно ли обновить класс TCard с помощью общедоступных событий OnShow и OnHide? Или можно смоделировать эти события?


person user1580348    schedule 05.07.2020    source источник
comment
Разве вы не можете просто использовать событие OnCardChange TCardPanel?   -  person Uwe Raabe    schedule 05.07.2020
comment
@UweRaabe Я пытался использовать событие OnCardChange в TCardPanel: когда я пытаюсь использовать PrevCard.Name или NextCard.Name в качестве строки в этом обработчике событий для идентификации карты, я получаю ошибку времени выполнения. Теперь я мог бы использовать NextCard.Caption для идентификации карты, но это приводит к запаху кода, поскольку подписи могут меняться во время выполнения. САМОЕ ЧИСТОЕ решение — перейти на событие TCard.OnShow.   -  person user1580348    schedule 05.07.2020
comment
Почему бы вам не использовать ActiveCard?   -  person Olivier    schedule 05.07.2020
comment
@ Оливье В каком контексте?   -  person user1580348    schedule 05.07.2020
comment
В OnCardChangeсобытии.   -  person Olivier    schedule 05.07.2020
comment
@Olivier Это не имеет никакого смысла, поскольку обработчик событий OnCardChange уже имеет параметры NextCard и PrevCard.   -  person user1580348    schedule 05.07.2020
comment
Зачем ссылаться на имя? Просто напишите if NextCart = Card1 или `if PrevCard = Card2' или что-то еще, что здесь имеет смысл. Трудно давать советы, не зная практического применения.   -  person Uwe Raabe    schedule 05.07.2020
comment
@UweRaabe Уве, ты прав. Я был дураком, что не видел этого. Если вы напишете ответ, я приму это.   -  person user1580348    schedule 05.07.2020


Ответы (1)


Используйте событие OnCardChange в TCardPanel и сравните PrevCard и/или NextCard с реальными экземплярами карты.

person Uwe Raabe    schedule 05.07.2020