+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 92.51 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

Добавление методов и событий в компонент

03.08.2012 16:43
Kest

Созданный в примере 1 компонент PrinterList отличается от своего прототипа только переопределением одного из методов родительского компонента. Такой способ изменения поведения стандартного компонента и реализации дополнительных функций нового компонента является очевидным и достаточно простым. Другой способ состоит в том, что поведение стандартного компонента улучшается путем добавления к нему собственных методов и (или) переопределения обработчиков стандартных событий.
Рассмотрим первый способ на следующем примере. 
Пример 2. Создать компонент, который будет конвертировать текущее содержимое поля ввода в заглавные буквы, и подсчитывать количество вхождений задаваемого символа в содержимом поля ввода.
Из условия примера следует, что для нового компонента в качестве родительского наиболее подходящим является стандартный компонент Edit класса TEdit. Пусть новый компонент называется NewEdit. Для реализации возлагаемых на него функций в модуль компонента добавим два метода:
• процедуру ToUpper, которая будет преобразовывать текущее содержимое поля ввода в заглавные буквы;
• функцию с именем GetThisCharCount, которая будет возвращать количество вхождений задаваемого символа в содержимом поля ввода.
Выполнив действия пункта 3 в примере 1, создайте заготовку модуля нового компонента и добавьте в ее интерфейсную часть описания новых методов ToUpper и GetThisCharCount:

unit NewEdit;
interface

uses
SysUtils, Classes, Controls, StdCtrls;
type
TNewEdit = class(TEdit)
private
{ Private declarations }
protected
{ Protected declarations }
public
procedure ToUpper;
function GetThisCharCount(C: char): Integer;
{ Public declarations }
published
{ Published declarations }
end;
procedure Register;

implementation

В раздел реализации включите программные коды новых методов, которые могут иметь следующий вид :

procedure TNewEdit.ToUpper;
begin
Text := Uppercase(Text); 
end;
function TNewEdit.GetThisCharCount(C: char): Integer; 
var
i : Integer; 
begin
Result := 0;
for i := 1 to Length(Text) do
if Text[i] = C then Inc(Result)
end;

Установите компонент NewEdit на вкладку New палитры компонентов Delphi, выполнив действия пункта 4 примера 1. 
Выполните тестирование нового компонента, для чего создайте новое приложение, поместите на форму компонент NewEdit, компонент Edit для ввода задаваемого символа и три кнопки. Поля ввода с помощью компонентов Label снабдите заголовками, например: "Исходная строка", "Заданный символ". Кнопкам также можно дать названия, например: "Перевод в заглавные", "Кол-во вхождений", "Выход". Для первых двух кнопок подготовьте обработчики события OnClick так, чтобы каждая из них вызывала один из добавленных методов:

procedure TForm1.Button1Click(Sender: TObject);
begin
NewEdit1.ToUpper;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
ShowMessage('Количество вхождений заданного символа '+Edit1.Text[1]+' = ' +
IntToStr(NewEdit1.GetThisCharCount(Edit1.Text[1]))) ;
NewEdit1.Text:=''; Edit1.Text:=''
end;

Запустите приложение и проверьте правильность выполнения функций нового компонента NewEdit. 
Выполнив действия пункта 6 (пример 1), подготовьте и зарегистрируйте в среде Delphi значок для компонента NewEdit. 
При создании пользовательского компонента чаще всего от него требуется такая же реакция на события, как и от того компонента, на основе которого он разработан. Если родительским классом компонента выбран класс, реализующий, например, один из стандартных компонентов (класс Edit в примере 2), то специально заботиться о событиях не нужно: все события, доступные компоненту Edit, будут доступны и компоненту NewEdit.
Задача усложняется в следующих случаях: 
1. Если класс, реализующий новый компонент, является наследником некоторого абстрактного класса (например, можно было бы произвести класс TNewEdit от класса TCustomEdit - предка TEdit). 
2. Если требуется, чтобы новый компонент реагировал на некоторое событие не так, как его предок и эта реакция реализовывалась бы самим компонентом, а не средствами приложения, в котором он будет использоваться.
В первом случае в распоряжении нового класса по умолчанию никаких событий не будет. Если требуется, чтобы новый компонент получил доступ к событиям, например, OnClick и OnKeyDown, то необходимо объявить их как свойства в разделе published:

type
TNewEdit = class(TCustomEdit)
private
{ Private declarations }
public
{ Public declarations }
published
property OnClick;
property OnKeyDown;
end;

После этого события OnClick и OnKeyDown появятся на вкладке Events Инспектора объектов, и можно будет обычным образом программировать их обработку в модуле компонента. 
Во втором случае необходимо просто переопределить в модуле компонента метод-обработчик требуемого события. Рассмотрим данный случай на следующем примере. 
Пример 3. Создать компонент, который будет представляться кнопкой, подсчитывающей количество нажатий на себя и отображающей его в своей надписи. В остальном новая кнопка должна реагировать на нажатие так же, как обычная. 
Поскольку новый компонент должен представляться кнопкой, то целесообразно в качестве базового класса выбрать класс TButton. В создаваемом компонентебудут использоваться его конструктор и обработчик события OnClick. Новому компоненту присвоим имя New1Button. 
Выполните все действия по созданию заготовки модуля нового компонента и добавьте описание нового класса TNew1Button следующими строками:
• в разделе private введите поле FCount:Integer для хранения количества нажатий на кнопку;
• в разделе public укажите заголовки переопределяемых методов - конструктора базового класса Create и обработчика события OnClick:

constructor Create (AOwner : TComponent);override;
procedure Click; override;

В раздел реализации включите программные коды новых методов:

constructor TNew1Button.Create(AOwner : TComponent);
begin
inherited Create(AOwner); {вызывается конструктор базового класса}
FCount:=0; {счетчик нажатий обнуляется}
end;
procedure TNew1Button.Click;
begin
inherited Click; {вызывается стандартный обработчик события OnClick}
Inc(FCount); {выполняются действия нового обработчика}
Caption:=IntToStr(FCount);
end;

Установите компонент New1Button на вкладку New палитры компонентов Delphi, выполнив действия пункта 4 примера 1. 
Выполните тестирование нового компонента, для чего создайте новое приложение, поместите на форму компонент New1Button и другие стандартные компоненты (кнопки, метки и т. д.) для обеспечения приемлемого интерфейса приложения. Проверьте, что новая кнопка действительно считает нажатия на себя.
Выполнив действия пункта 6 (пример 1), подготовьте и зарегистрируйте в среде Delphi значок для компонента New1Button. 
Модифицируйте тестовое приложение, создав в нем собственный обработчик события OnClick для кнопки New1Button (например, в обработчике можно вывести какое-либо сообщение процедурой ShowMessage или иным способом). Проверьте работу приложения и сделайте соответствующие выводы.

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

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года