Почему формы не получают сообщения WM_NOTIFY для детей TFrame? - PullRequest
2 голосов
/ 15 декабря 2011

Сообщение WM_NOTIFY часто используется для «всплывающих подсказок» (всплывающих сообщений) и других уведомлений элемента управления, но если я помещаю элемент управления в TFrame, сообщения WM_NOTIFY для этих элементов управления никогда не появляются. Почему эти сообщения больше не отправляются в мою форму, и что я могу с этим поделать?

1 Ответ

7 голосов
/ 15 декабря 2011

WM_NOTIFY отправляется в родительское окно элемента управления. Это означает, что TFrame, а не его собственный родитель TForm (или другой родитель), получит сообщение для своих прямых дочерних элементов управления.

Вы не должны обрабатывать WM_NOTIFY напрямую. Подкласс самого дочернего элемента управления, например, назначив ему новый обработчик WindowProc, а затем обработайте сообщение CN_NOTIFY. VCL получит исходное сообщение WM_NOTIFY и автоматически отправит его как сообщение CN_NOTIFY конкретному элементу управления, к которому он принадлежит.

То же самое относится к WM_COMMAND (пересылается как CN_COMMAND) и многим другим пересылаемым системным сообщениям. Модуль Controls.pas определяет все доступные CN_... сообщения, которые определены для перенаправленных системных сообщений.

...