Недавно писал, как здорово было бы, если бы в Delphi были определены интерфейсы для базовых классов. Например, если бы все контролы, имеющие свойство Caption(например TLabel; TButton; TCheckBox; TRadioButton; TGroupBox; TBitBtn; TSpeedButton), реализовывали интерфейс ICaptionedControl с методом GetCaption. Подробнее читайте здесь.
Я просто мечтал, а Алексей Казанцев взял и показал, что подобное можно реализовать уже сейчас, и даже выложил у себя в блоге пример, показывающий, как добавить поддержку интерфейса ICaptionedControl для классов TControl и TPanel. Реализация сделана с помощью хука на метод TObject.GetInterface и представляет собой практически готовое решение. =)))
p.s. я до сих пор не могу поверить своим глазам. =) Это же действительно работает! O_o
p.p.s. Даже код читать – одно удовольствие.
Ну вот, осталось теперь написать интерфейсы для стандартных классов... и отправить в CodeGear с пометкой "добавьте, пожалуйсто, в VCL!" :D
ОтветитьУдалитьТеоретически да. :D
ОтветитьУдалитьНе уверен, но Джефф Оверкэш кажется, где-то говорил, что у Delphi Team есть какая-то политика, запрещающая использовать присланный им код.
Не так давно, я просматривал какие-то сорцы из недр VCL и там была куча кода где авторами значились наши соотечественники.
ОтветитьУдалитьДа, действительно, что-то сомнительно это утверждение. Иначе не видать бы нам кода из FastMM, FastCode, функций округления John Herbster и тому подобных приятностей...
ОтветитьУдалитьЯ имел в виду код, который юзеры предлагают в ньюзгруппах. Мне кажется, что где-то там я это утверждение и видел, но найти не смог. Впрочем, я могу ошибаться за давностью, да к тому же это и непринципиально.
ОтветитьУдалитьFastMM - старый продукт у которого есть своя лицензия, которая, вероятно, позволила включить его в состав Delphi.
Забавно, не знал, что FastCode тоже включён в VCL.
В Jedi VCL этим вроде ещё во времена Delphi 7 анимались :-)
ОтветитьУдалитьКлассы TJvEx.....
Компоненты JVCL поддерживают какие-то свои интерфейсы, да.
ОтветитьУдалитьИмхо, главный выигрыш от этих интерфейсов будет только в том случае, если все интерфейсы будут объявлены и реализованы прямо в VCL. Таким образом, у сторонних разработчиков появится возможность включить поддержку тех же интерфейсов в свои классы/компоненты, сделав процесс перехода с одной либы на другую более прозрачным. И использовать всё это хозяйство станет проще.