(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Создание собственного компонента (TMyLabel)

Источник: pro-delphi
Веселов Александр

Создание собственного компонента (TMyLabel)

Я предлагаю на время отложить проект таймера, которому были посвящены предыдущие уроки, вплоть до последнего. Когда-то я говорил, что использование стандартных компонентов рано или поздно надоест, если, конечно, Вы программируете постоянно, а не увлеклись этим в связи с предстоящим завтра зачетом. "Почему?" - удивленно спросите Вы. В качестве иллюстрации ответа, приведу в пример компонент TPanel. Сколько бы я ни использовал его, мне всегда приходилось стирать вручную надписи Panel1, Panel2 и т.п., располагаемые в центре панели поумолчнию.

Возьмите следующим TLabel. Киньте его на форму. По умолчанию его свойство AutoSize установлено в True, что приводит к автоматическому изменению ширины надписи в зависимости от длины текста, помещенного в Caption. Случаев, когда от такого поведения компонента я пришел бы в восторг, что-то припомнить не могу. Наоборот, всегда приходилось переназначать это свойство вручную.

Это были первые - самые простые примеры. С них и предлагаю начать, чтобы понять процесс, а впереди будут компоненты более сложные и очень сложные.

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

Откройте среду разработки Delphi и создайте новый компонент, выбрав в меню Component - New VCL Component (создавать мы будем компонент для библиотеки визуальных компонентов - VCL).

В следующем окне выберите TLabel в левой колонке. Это и будет предок, от которого наш компонент унаследует все свои свойства. Нажмите "Next".

Затем придумайте имя Вашему классу, помня о том, что можно использовать только латинские буквы и все подобные имена начинаются с заглавной "Т". Выберите или задайте имя закладки на панели инструментов и укажите каталог, где будет храниться файл. Последнее поле "Search Path" оставьте пока пустым.

<Next> - <Finish> и оболочка создаст заготовку под Ваш новый компонент:
Сохраните файл, указав выбранный на предыдущем шаге каталог.

unit MyLabelLes;                     // Заголовок модуля
interface                                 // Начало раздела Interface

uses
SysUtils, Classes, Controls, StdCtrls;   // Объявления задействованных модулей

type
TMyLabelLes = class(TLabel)  // Объявление класса, наследуемого от TLabel
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
published
{ Published declarations }
end;

procedure Register;                  // Объявление стандартной процедуры,
// регистрирующей новый компонент

implementation                         // Начало раздела  implementation

procedure Register;                 // Код стандартной процедуры
begin
RegisterComponents("Lessons", [TMyLabelLes]);  // Оператор, который зарегистрирует
// компонент TMyLabelLes на закладке
// Lessons
end;

end.

Все остальное нам придется дописать ручками.
А всего остального осталось не много: дописать в раздел implementation конструктор - специальную процедуру:

constructor TMyLabelLes.Create( AOwner: TComponent );  // Прародитель - TComponent
begin
inherited Create(AOwner);                       // Наследуются все "прелести" прародителя
AutoSize:=False;                                     // А следующие три оператора… устанавливают
Height:=13;                                          // нужные нам свойства, которыми будет
Width:=80;                                          // наделен новый экземпляр компонента
// сразу после его создания
end;

Эта специальная процедура "производит на свет", как Вы могли догадаться из названия, собственно сам компонент. Помните, я упоминал в начале урока, что таких прародителей - по пальцам перечесть. Вот один из них: в первой строчке виден - TComponent. От него происходят визуальные компоненты.

Следующий оператор передает все свойства прародителя в новый компонент. Если больше ничего не написать, то мы получим новый компонент TMyLabelLes в точности копирующий обычную метку TLabel. Но у нас задача - сделать свойство AutoSize=False, чтобы надписи, размещаемые на форме, не меняли свою ширину в зависимости от помещенного в них текста. Следующие три оператора принудительно изменяют свойства у нового компонента.

Не забудьте добавить объявление этой процедуры в раздел Public

Constructor Create( AOwner: TComponent); override;

Сохраните файл.

Делаем следующий шаг - создаем пакет Меню - File - New … как показано на рисунке:

Затем кнопкой "Add File To Project" (на панели кнопок) необходимо добавить созданный на предыдущем шаге файл MyLabelLes.pas в данный пакет.

Обязательно сохраните пакет, дав ему осмысленное имя. Причем, если Вы попытаетесь назвать его так же, как файл, содержащий текст компонента, то Delphi выдаст ошибку, поэтому назовите его, например: MyLabelLesPack.

Затем скомпилируйте пакет, щелкнув правой кнопкой в окне Project Manager на заголовке проекта и выбрав в контекстном меню Compile.

Если система определит наличие ошибок, исправьте их и повторите компиляцию.

В случае, если ошибок нет, можно приступать к установке компонента в Вашу среду разработки. Для этого щелкните правой кнопкой все по тому же заголовку проекта в окне Project Manager и выберите Install.

Система должна выдать сообщение об успешной установке.

Важно: нажмите пиктограмму сохранить на панели кнопок.

Закройте проект.

Полюбуйтесь своим детищем:
меню Component - Install Packages, найдите его в списке и щелкните кнопку Components:

Есть!

Теперь нужно протестировать новый компонент.
Для чего создайте новый проект VCL Form Application и положите на форму Label с вкладки Standart и MyLabelLes с вкладки Lessons. Обратите внимание на разницу свойств и поведения этих компонентов.

Разберемся, где что хранится. Для чего это нужно? Предположим, что Вы отлаживали какой-то компонент, долго его настраивали и, наконец, получили то, что хотели. Но для его отладки Вы использовали временную папку, а все компоненты у вас живут где-то в Program Files/Borland и т.д. Или, например, Вы хотите передать этот удачный компонент коллеге по работе. Или у вас два компьютера: настольный и переносной. А Вы хотите везде иметь среду разработки с одинаковым набором. Чтобы лучше это понять, давайте удалим вновь созданный компонент. Перенесем его в другую папку и вновь инсталлируем его.

Я сделаю это один раз, в этом уроке и больше к этому важному вопросу возвращаться не будем.

Итак.

1. Закройте все открытые проекты (File - Close All)
2. Меню, Component и т.д., как показано на рисунке:

3. Очень важный шаг: удалите путь, меню Tools - Delphi Option - Library - Win 32 и т.д., как показано на рисунке.

Если этого не сделать, то перенос компонента в другую папку приведет к некоторой путанице. Система может упрямо тащить компонент из прежнего места.

4. Проверьте, используя проводник, каталог, указанный как Output:

В этой папке не должно остаться никаких файлов с тильдами в имени файла, никаких MyLabelLesPack.bpl.

5. Перенесите папку с исходниками компонента в папку Program Files/borland и т.д. или любой другой, удобный Вам.

6. Повторите установку компонента.

Подведем итог:
в этом уроке Вы научились

  • Создавать собственный компонент, устанавливать его в среду разработки и использовать в своем приложении.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Обсудить материал в конференции Embarcadero »
Написать редактору 
 Рекомендовать » Дата публикации: 18.11.2011 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
IBM RATIONAL Rose Enterprise Floating User License + Sw Subscription & Support 12 Months
NERO 2016 Classic ESD. Электронный ключ
Microsoft Windows Professional 10, Электронный ключ
VCL Subscription
Купить, скачать Dr.Web Security Space, 1 год, 1 ПК
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
СУБД Oracle "с нуля"
Новые материалы
3D и виртуальная реальность. Все о Macromedia Flash MX.
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Настройка меню "Пуск" Windows 7 при помощи реестра (3)
Скажите пожалуйста, а как можно закрепить ярлыки программ с помощью твиков реестра в левой части...
 
Ищу программиста PYTHON (1)
Ищу программиста для написание программ python 3 + библиотека tkinter Есть данные в БД...
 
Пишу программы на заказ профессионально (2265)
Пишу программы на заказ на языках Pascal (численные методы, списки, деревья, прерывания) под...
 
Ищу программиста для написания программы (17)
Ищу программиста ,владеющего Вижуал Бэйсик и программированием в Экселе, для написания...
 
Программы Delphi на заказ (236)
Пишу программы в среде Delphi на заказ http://bddelphi.ucoz.ru/
 
 
 



    
rambler's top100 Rambler's Top100