Это моя точка зрения:
1) Вы не можете включить в определение интерфейса
procedure WMSize(var Message: TWMSize); message WM_SIZE;
потому что это на самом деле динамический метод:
Помните, что методы в определении интерфейса не могут быть объявлены как virtual , dynamic , abstract или override .
2) Включая в определение интерфейса
procedure WMSize(var Message: TWMSize);
- это нонсенс, так как это не сигнатура метода, предназначенного для дальнейшей реализации.
Тогда определение интерфейса должно быть голым:
type
IDoSomething = interface
['{EFE0308B-A85D-4DF3-889C-40FBC8FE84D0}']
procedure DoSomething1;
end;
Следующие определения классов остаются без изменений (то же самое для их реализаций):
TMyCheckBox = class(TCheckBox, IDoSomething)
procedure DoSomething1;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end;
TMyRadioButton = class(TRadioButton, IDoSomething)
procedure DoSomething1;
procedure WMSize(var Message: TWMSize); message WM_SIZE;
end;
implementation
procedure TMyCheckBox.DoSomething1;
begin
//
end;
procedure TMyCheckBox.WMSize(var Message: TWMSize);
begin
//
end;
{ TMyRadioButton }
procedure TMyRadioButton.DoSomething1;
begin
//
end;
procedure TMyRadioButton.WMSize(var Message: TWMSize);
begin
//
end;