Во время работы над новым компонентом наиболее частой ошибкой является попытка установить (переустановить) компонент, который уже находится в одном из пакетов (обычно такое желание возникает после внесения изменений в модулькомпонента).
В этом случае 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.
interface
03.
uses
04.
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
05.
NkEdit;
// ссылка на модуль <a href="http://delphicomponent.ru/" title="компонента" target="_blank">компонента</a>
06.
type
07.
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.
private
22.
{Private declarations }
23.
public
24.
{ Public declarations )
25.
end;
26.
var
27.
Forml: TForml;
28.
implementation
29.
{$R *.dfm}
30.
// нажатие клавиши в поле Расстояние
31.
procedure
TFomu
.
NkEditlKeyPress(Sender: TObject;
var
Key: Char);
32.
begin
33.
if
Key - Char(VK_RETURN)
34.
then
NkEdit2
.
SetFocus;
// переместить курсор в поле Цена
35.
end
;
36.
// нажатие клавиши в поле Цена
37.
procedure
TE'orrta
.
NkEdit2KeyPress (Sender; TObject;
var
Key: Char) ;
38.
begin
39.
if
Key - Chac(VK_RETURN)
40.
then
NkEdit3
.
SetFocus;
// переместить курсор в поле Потребление
41.
end
;
42.
// нажатие клавиши в поле Потребление
43.
procedure
TFoml
.
NkEditSKeyPress{Sender: TObject;
var
Key: CharI;
44.
begin
45.
if
Key = Char(VK_RETURN)
46.
then
Buttonl
.
SetFocus;
// // сделать активной кнопку Вычислить
47.
end
;
48.
// щелчок на кнопке Вычислить
49.
procedure
TForml
.
ButtonlClick(Sender: TObject);
50.
var
51.
rast :
real
;
// расстояние
52.
cena :
real
;
// цена
53.
potr :
real
;
// потребление на 100 км
54.
suimn :
real
;
// сумма
55.
mes:
string
;
56.
begin
57.
rast := StrToFloat(NkEditl
.
Text);
58.
cena := StrToFloat(NkEdit2
.
Text) ;
59.
potr := StrToFloat(NkEdit3
.
Text);
60.
surnm := rast /
100
* potr * cena;
61.
if
CheckBoxl
.
Checked
then
62.
suitim := sumn *
2
;
63.
mes := 'Поездка на дачу
1
;
64.
if
ChееkBox1
.
Checked
then
65.
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