Шаг 72 - Создание новых компонентов VCL и совместимость с Дельфи

Наконец-то мы приступили к созданию компонентов под VCL. Вначале некоторое отступление. Бывают вопросы типа "а откуда берется Handle, WndProc ?". Или другой - Вообще как это все работает! Я должен еще раз сказать, что просто так откуда-то ничего не берется. Сама библиотека VCL, как и любая другая библиотека, является просто оболочкой для WinAPI. Например. Один из важнейших классов - TForm. Вполне можно было бы создать диалоговое окно вообще не используя классы VCL. Даже вообще не используя классы. При помощи вызова функции CreateWindow можно создать полнофункциональное окно. Классы созданы только для того, чтобы облегчать жизнь программистам.

Еще один момент. Как это ни странно, вовсе не обязательно создавать свои классы VCL. Довольно большая часть программистов Delphi и C++ Builder являются прикладными программистами. Они используют доступные компоненты для создания своих приложений, чаще всего баз данных или каких-то мелких утилиток.

Однако Вы все же это читаете, значит, Вам интересно создание чего-то нового, интересного. Пусть это чем-то смахивает на принципы Linux OpenSource, но я скажу, что замечательно, сделав и отладив свой оригинальный компонент, выставить его на всеобщее обозрение (и загрузку). Возможно он придется по душе. Вас заметят, найдут и пригласят на работу в Европу или Америку :)). И Билл Гейтс поперхнется от зависти :).

Несколько слов насчет совместимости. Как это ни прискорбно, более половины компонентов написаны на Delphi. Должен Вас обрадовать, сказав, что C++ Builder в полной мере поддерживает компилятор Дельфи пять. Файлы .pas можно спокойно добавлять в проекты. Для включения модуля pas в проект необходим автоматически генерируемый файл *.hpp, с именем, аналогичным файлу модуля. При этом вызовы функций будут автоматически преобразовываться если это необходимо, к FAR PASCAL. Стилистика этого вызова кстати используется не только в Делфи, но и в вызовах типа __stdcall для АПИ. И в ОпенГЛ тоже используется. Таким образом, возможно инсталлировать любой компонент любой версии Делфи в палитру. Насчет версий. Вообще, полностью совместимы только версии 5. Но при некоторой доработке будут работать и все другие варианты. Например, я смог инсталлировать на C++ Builder компонент Delphi 1.0, хотя первоначально на Делфи 5 не смог.

VCL имеет достаточно развитую иерархию классов. Поподробнее о ней мы поговорим в следующем шаге. Но надо сказать, что каждая ветвь этого класса предоставляет максимально стандартизованный вариант интерфейса к объекту. При произведении потомков от компонент с собственным внешним видом (таких, как, например TListView) в общем случае не нужно заботится о преобразовании его в нужный вид. Вообще, в общем случае создание визуального компонента в основном состоит в перегрузке преопределенных виртуальных функций.

Также я намерен привести пример создания довольно полезных компонентов. Таких, как, например диалог выбора папки или список файлов Explorer-style. Это пока. Может еще чего придумаю...


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 25.05.2002