h2>Аспекты реализации
Технически, мониторинг сообщений любого контрола легко установить, подменив его свойство WindowProc. Именно этот прием используется в предлагаемом проекте. Для удобства, вся работа связанная с установлением и управлением мониторинга инкапсулирована в классе TControlInfo модуля U_Control. Передавая конструктору этого класса ссылку на интересующий вас контрол, вы включаете мониторинг за этим контролом.
Единственной технической сложностью является преобразование номера полученного сообщения в его строковое обозначение. Как, обрабатывая, к примеру, сообщение N24, узнать, что оно носит название WM_SHOWWINDOW? Решая эту проблему, я пошел следующим (возможно нерациональным) путем: так как названия всех Windows и VCL сообщений однотипным образом перечислены в двух файлах (Messages.pas и Controls.pas), то можно написать небольшую программку, которая вычленит названия сообщений из этих модулей и создаст вспомогательный файл, содержащий case оператор вида: case WM_Number of WM_NULL : Result := 'WM_NULL'; WM_CREATE : Result := 'WM_CREATE'; WM_DESTROY : Result := 'WM_DESTROY'; // [ ... Skiped ... ] CN_SYSCHAR : Result := 'CN_SYSCHAR'; CN_NOTIFY : Result := 'CN_NOTIFY'; end;
Таким образом, можно почти автоматически создать функцию, которая преобразует номер Windows или VCL сообщения в его название. Пример такой функции можно увидеть в модуле MonitorMessage.
В заключение отмечу, что проект предназначен для работы в Delphi 5,6. По мере возможностей, весь код проекта снабжен поясняющими комментариями.
Исходники проекта (11K)
Специально для