удобный визуальный комбайн ВИТАЛИЙ ИЖЕВСКИЙ Спецвыпуск: Хакер, номер #065, стр. 065-062-4 [компонентный подход] предоставляет явные преимущества. А что делать, если нет нужного или если то, что есть, не обеспечивает желательный функционал программы? Выход 1 Интернет просто кишит разного рода компонентами, а форумы — соответствующими темами по Delphi. Трудно выбрать нужное из такой массы или найти компонент именно под используемую версию. К тому же, если ты воспользовался сторонними компонентами, программа начинает работать так, как хотел разработчик компонентов, а не как хотел ты. Тебе достанутся ошибки разработчика, его неоптимальный код, его тормоза в работе программы и т.д. Не обольщайся, идеальных программ просто не бывает — их разрабатывают люди. Выход 2 Неужели руки большинства разработчиков растут настолько криво? Что, нельзя уже и собственными компонентами обзавестись? Конечно, на такой случай никто не станет изобретать велосипед, но бывает, что не удается найти именно велосипед. В Delphi используется обычная объектная модель и каждый компонент является потомком какого-нибудь базового класса. Работает нормальная наследуемость свойств и методов, их переопределение. Приведем простенький пример создания собственного компонента (в конце концов, все не так сложно). Запускаешь Delphi for Microsoft Win32. Выбираешь тип проекта: Delphi Projects\Delphi Files-> Component... Появляется окно выбора компонента, потомком которого будет наш собственный компонент. Мы хотим просто добавить некое свойство MyInt к стандартному набору свойств компонента TButton — выбираем его и указываем, на какой вкладке палитры компонентов должен быть помещен новый компонент. unit Button1; interface uses SysUtils, Classes, Controls, StdCtrls; type TMyButton = class(TButton) private { Private declarations } FMyInt: Integer; procedure SetMyInt(const Value: Integer); function GetMyInt: Integer; protected { Protected declarations } public { Public declarations } published { Published declarations } property MyInt:Integer read GetMyInt write SetMyInt; end; procedure Register; implementation procedure Register; begin RegisterComponents('Samples', [TMyButton]); end; function TMyButton.GetMyInt: Integer; begin result := FMyInt; end; procedure TMyButton.SetMyInt(const Value: Integer); begin FMyInt := Value; end; end. Компилируем проект через <Shift>+<F9> или Project\Build Paqckage1. В директории, выставленной по умолчанию для новых проектов, появится файл Package1.bpl. Теперь закрыть все и открыть меню Component\Install Packages. Добавить путь к указанному файлу, нажать вездесущую кнопку ОК. Теперь, если будет создан новый проект для Win32 и если будет открыта вкладка Samples, то можно поместить на форму компонент MyButton, уже содержащий новое свойство MyInt. |