Потреба в динамічних методах особливо відчутна при розробці об'єктів, що відповідають елементам інтерфейсу Windows, коли кожен з великої ієрархії об'єктів містить обробники десятків різноманітних повідомлень.
Методи, призначені спеціально для обробки повідомлень Windows, становлять підмножину динамічних методів і оголошуються директивою message, за якою слідує індекс - ідентифікатор повідомлення. Вони повинні бути обов'язково описані як процедури, що мають один var-параметр. На відміну від колишніх версій мови, цей параметр може бути описаний довільно, наприклад:
type TMyControl = class (TWinControl)
procedure WMSizetvar Message: TWMSize); message WM_SIZE; end;
type TMyOtherControl = class (TMyControl)
procedure Resize (var Info); message WM_SIZE;end;
Для перекриття методів-обробників повідомлень директива override не використовується; в цьому випадку потрібно зберегти в описі директиву message з індексом методу. У обробниках повідомлень (і тільки в них) можна викликати метод-предок, просто вказавши ключове слово inherited, без зазначення його імені та перетворення типу параметрів: предок буде знайдений за індексом. Щоб виконати всю необхідну роботу при обробці повідомлення, за рідкісним винятком, настійно рекомендується викликати попередній обробник:
procedure MyMessageHandler (var Message); message wm_command;
begin MyProcessing; inherited; end;