В предыдущем уроке я рассказал как добавить в приложение форму “О программе”. Несколько форм в одном приложении - дело повсеместное и привычное. Но что делать, если разрабатывается большая система, состоящая из множества программ? Пусть даже не система, пусть Вы написали уже много программ, и Вам хочется, чтобы такая форма как “О программе” или какой-то общий справочник, кодификатор, были одинаковыми во всех программах. Копировать каждый раз файл формы *.pas из папки с одним проектом в папку с другим? Или каждый раз добавлять в новый проект из какого-то одного директория? И первый, и второй способы неудобны, хотя и они приемлемы. Гораздо удобнее на случай раз и навсегда отлаженной формы, сделать на ее основе компонент, зарегистрировать его в панели Tools рабочей среды, и пользоваться.
Проведите эксперимент по удалению формы из проекта, рассмотренного на предыдущем уроке. После компиляции и запуска программы, форма “О программе” будет вызвана на экран как ни в чем не бывало. Поскольку я руками прописал в uses ссылку на модуль формы About, я должен это описание руками же и удалить, не забыв удалить и операторы создания и вызова этой формы из соответствующей процедуры.
Затем создайте модуль компонента:
unit PrDAbout;
interface
Uses SysUtils
, WinTypes
, WinProcs
, Messages
, Classes
, Graphics
, Controls
, Forms
, aboutLes // Объявление о намерении
// использовать модуль
// About
;
, WinTypes
, WinProcs
, Messages
, Classes
, Graphics
, Controls
, Forms
, aboutLes // Объявление о намерении
// использовать модуль
// About
;
Type TPrDAbout = class(TComponent) // Новый класс
Public
Constructor Create (AOwner: TComponent); override; // Объявление конструктора
Function Execute: Boolean; // Объявление функции, реализующей
// метод "выполнить"
end;
Public
Constructor Create (AOwner: TComponent); override; // Объявление конструктора
Function Execute: Boolean; // Объявление функции, реализующей
// метод "выполнить"
end;
Procedure Register; // Объявление процедуры регистрации
implementation
Constructor TPrDAbout.Create (AOwner: TComponent);// Конструтор компонента
Begin
Inherited Create(AOwner); // Оператор, устанавливающий
// наследование всех свойств
// и методов от предка TComponent
end;
Begin
Inherited Create(AOwner); // Оператор, устанавливающий
// наследование всех свойств
// и методов от предка TComponent
end;
Function TPrDAbout.Execute: Boolean; // Текст метода
Begin
AboutFrm:= TAboutFrm.create( Application); // Создание формы, описанной
// в модуле About
Try
Result:= (AboutFrm.ShowModal = IDOK); // Оценка возвращаемого результата
// и передача его в результат
// работы функции (тип Boolean)
finally
AboutFrm.Free; // Создалась форма или нет,
// память надо очищать
end;
end;
Begin
AboutFrm:= TAboutFrm.create( Application); // Создание формы, описанной
// в модуле About
Try
Result:= (AboutFrm.ShowModal = IDOK); // Оценка возвращаемого результата
// и передача его в результат
// работы функции (тип Boolean)
finally
AboutFrm.Free; // Создалась форма или нет,
// память надо очищать
end;
end;
Procedure Register; // Регистрация компонента TPrDAbout
// на закладке Pro-Delphi Lib
Begin
RegisterComponents('Pro-Delphi Lib',[TPrDAbout]);
end;
end.
// на закладке Pro-Delphi Lib
Begin
RegisterComponents('Pro-Delphi Lib',[TPrDAbout]);
end;
end.
И сохраните его.
Создайте новый пакет, добавьте в него новый модуль, инсталлируйте пакет в среду разработки Delphi. Обратите внимание, что при создании формы About я использовал ранее созданные компоненты (например: компонент гиперссылку), поэтому в процессе инсталляции пакета, на экран будет выведено окно с информацией о безусловном включении модулей этих компонентов в пакет, как необходимых для создания данного компонента.
Вообще-то, я не склонен делать одни новые компоненты на основе других, разработанных ранее. Во-первых, даже при всей моей любви только к параллельным и перпендикулярным направлениям, легко запутаться, что где хранится и откуда берется. Во-вторых, изменения, вносимые в логику работы более ранних компонентов, никак не отразятся на более поздних. В-третьих, если Вам необходимо избавиться навсегда от какого-то компонента (скажем, разработали другой, более крутой), а он “завязан” на кучу других, то это становится настоящей проблемой.
Что же дальше?
На следующем уроке я планирую рассказать о создании и добавлении в проект “Таймер” еще одной формы. С помощью этой формы можно будет задать настройки программы и сохранить их.
А через урок я завершу цикл, посвященный проекту “Таймер” рассказом о том, как можно обработать уже готовый exe-файл.
Затем нас ждет знакомство с разработкой более сложного проекта, в работе которого будет использовано подключение к базе данных и работа с записями, хранимыми в ней.
На следующем уроке я планирую рассказать о создании и добавлении в проект “Таймер” еще одной формы. С помощью этой формы можно будет задать настройки программы и сохранить их.
А через урок я завершу цикл, посвященный проекту “Таймер” рассказом о том, как можно обработать уже готовый exe-файл.
Затем нас ждет знакомство с разработкой более сложного проекта, в работе которого будет использовано подключение к базе данных и работа с записями, хранимыми в ней.
Удачи всем!
Помогите, пожалуйста, разобраться как в этом компоненте изменять гиперссылку. Установил компонент, сделал форму "О программе", но на ней ссылка на Ваш сайт. А если я хочу поместить ссылку на свой сайт или какой-либо другой, как быть? Спасибо за ответ. Ваш подписчик Борис.
ОтветитьУдалитьПоменяйте свойства в инспекторе свойств. У меня сейчас не установлена среда разработки, точнее сказать пока не могу, извините.
ОтветитьУдалить