Во время работы над новым компонентом наиболее частой ошибкой является попытка установить (переустановить) компонент, который уже находится в одном из пакетов (обычно такое желание возникает после внесения изменений в модулькомпонента).
В этом случае Delphi выводит сообщение: The package already contains unit named... (Пакет уже содержит модуль, который называется...) и процесс установки завершается. Для того чтобы преодолеть эту ошибочную ситуацию и установить компонент в нужный пакет или установить в пакет обновленную версию компонента, необходимо сначала удалить компонент из пакета, а затем установить его снова.
После того как компонент будет добавлен в пакет, необходимо проверить поведение компонента во время разработки приложения, использующего этот компонент (работоспособность компонента была проверена раньше, когда он добавлялся в форму приложения динамически, во время работы программы).
Можно считать, что компонент работает правильно, если во время разработки приложения удалось поместить этот компонент в форму разрабатываемого приложения и, используя окно Object Inspector, установить, значения свойств компонента, причем как новых, так и унаследованных от родительского класса.
Работоспособность компонента NkEdit можно проверить, использовав его, например, в приложении Поездка на дачу, вид формы которого приведен на рис. 16.12.
Рис. 16.12. Форма приложения Поездка на дачу (поля ввода-редактирования компонента NkEdit )

Внешне форма разрабатываемого приложения почти ничем не отличается от формы приложения Поездка на дачу, рассмотренного в гл. 6. Однако если выбранным компонентом будет поле ввода, то в окне Object Inspector указано, что текущим компонентом является компонент класса THkEdit, a в списке свойств можно увидеть новое (по сравнению со списком свойств стандартного компонента Edit) свойство — кшпь (рис. 16.13).
Рис. 16.13. Свойство Mumb компонента NkEdit отражено в окне Object Inspector

В листинге 16.4 приведен модуль приложения Поездка на дачу. Очевидно, что текст программы значительно меньше первоначального варианта, в котором для ввода данных использовался компонент Edit.
Листинг 16.4. Приложение "Поездка на дачу" (тест компонента NkEdit)
01.unit fazenda_;02.interface03.uses04.Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,05.NkEdit; // ссылка на модуль <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a>06.type07.TForml = class(TForm)08.NkEditl: TNkEdiC; // расстояние09.NkEdit2: TNkEdit; // ценз литра бензина10.NkEdit3; TNkEdit; // потребление бензина на 100 км11.CheckBoxl: TCheckBox; // True — поездка -суда и обратно12.Button1: TButton; // кнопка Вычислить13.LabeH: TLabel; // попе вывода результата расчета14.Labell: TLabel;15.Label2: TLabel;16.Label3: TLabel;17.procedure ButtonlClick[Sender: TObject);18.procedure NkEdltlKeyPress(Sender: TObject; var Key: Char);19.procedure NkEdit2KeyPress(Sender: TObject; VAC Key: Char);20.procedure NkEditSKeyPress(Sender: TObject; var Key: Char);21.private22.{Private declarations }23.public24.{ Public declarations )25.end;26.var27.Forml: TForml;28.implementation29.{$R *.dfm}30.// нажатие клавиши в поле Расстояние31.procedure TFomu.NkEditlKeyPress(Sender: TObject; var Key: Char);32.begin33.if Key - Char(VK_RETURN)34.then NkEdit2.SetFocus; // переместить курсор в поле Цена35.end;36.// нажатие клавиши в поле Цена37.procedure TE'orrta.NkEdit2KeyPress (Sender; TObject; var Key: Char) ;38.begin39.if Key - Chac(VK_RETURN)40.then NkEdit3.SetFocus; // переместить курсор в поле Потребление41.end;42.// нажатие клавиши в поле Потребление43.procedure TFoml.NkEditSKeyPress{Sender: TObject; var Key: CharI;44.begin45.if Key = Char(VK_RETURN)46.then Buttonl.SetFocus; // // сделать активной кнопку Вычислить47.end;48.// щелчок на кнопке Вычислить49.procedure TForml.ButtonlClick(Sender: TObject);50.var51.rast : real; // расстояние52.cena : real; // цена53.potr : real; // потребление на 100 км54.suimn : real; // сумма55.mes: string;56.begin57.rast := StrToFloat(NkEditl.Text);58.cena := StrToFloat(NkEdit2.Text) ;59.potr := StrToFloat(NkEdit3.Text);60.surnm := rast / 100 * potr * cena;61.if CheckBoxl.Checked then62.suitim := sumn * 2;63.mes := 'Поездка на дачу1 ;64.if ChееkBox1.Checked then65.mes := mes + ' и обратно';66.mes := roes + 'обойдется в ' + FloatToStrFlsuram,ffGeneral,4,2)+ ' руб.';67.Label4.Caption := mes;68.end;69.end.Иногда возникает необходимость удалить компонент из пакета. Сделать это можно при помощи редактора пакетакомпонентов.

В открывшемся окне Confirm (рис. 16.15) в ответ на запрос: cancel this dialog box and open. .. (Закрыть этот диалог и открыть пакет...) надо нажать кнопку Yes.
Рис. 16.15. Диалоговое окно Confirm

В результате открывается окно редактора пакета Package (рис. 16.16), в котором в списке Contains (Содержимое) перечислены компоненты пакета.
Рис. 16.16. Окно редактора пакета

Для того чтобы удалить компонент из пакета, необходимо нажать кнопку Remove. В открывшемся диалоговом окне Remove From Project (рис. 16.17) следует выбрать удаляемый компонент и нажать кнопку ОК.
Рис. 16,17. Выбор компонента, удаляемого из пакета

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

После перекомпиляции пакета необходимо закрыть окно редактора пакета и в открывшемся окне подтвердить сохранение изменений в пакете, из которого был удален компонент.
Delphi позволяет менять порядок следования вкладок палитры компонентов, названия вкладок, а также порядок следования значков компонентов на вкладках. Настройка палитры компонентов выполняется в диалоговом окне Palette Properties, которое открывается выбором из меню Component команды Configure Palette (рис. 16.19).
Рис. 16.19. Диалоговое окно Palette Properties

Сначала в списке Pages необходимо выделить нужную вкладку палитры компонентов. Затем, если надо изменить порядок следования вкладок палитры компонентов, следует воспользоваться кнопками Move Up и Move Down и путем перемещения выбранного имени по списку Pages добиться нужного порядка следования вкладок.
Если надо изменить порядок следования значков компонентов на вкладке, то в списке Components следует выбрать нужный значок компонента и кнопками Move Up и Move Down переместить значок на новое место.
При необходимости изменить имя вкладки палитры следует в списке Pages выбрать имя нужной вкладки, нажать кнопку Rename и в поле Page name открывшегося диалогового окна Rename page (рис. 16.20) ввести новое имя.
Рис. 16.20. Диалоговое окно Rename page

