Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование работы перекрёстка по регулированию движения на GPSS + Поя...
Моделирование ЭВМ на GPSS (три класса заданий) + Пояснительная записка
База данных междугородних телефонных разговоров на Delphi

Добавление методов и событий в компонент
Созданный в примере 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 или иным способом). Проверьте работу приложения и сделайте соответствующие выводы.




















Опубликовал Kest January 07 2010 14:28:13 · 0 Комментариев · 13878 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
RAS
SUIPack
Borland Delphi 8 ...
DCMintry
Pirc
Report
База игр
Краснов М. - Open...
Быстрое создание ...
PDJ Scrollers
Пример работы с ф...
Пример работы с р...
MPTools
OnlineIP
RSS Feeds
DelphiX
Игра в крестики н...
Язык программиров...
Керниган Б.В., Ри...
Технология .Net в VB

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97839
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14193
Borland Delphi ... 10293
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Исследование Поиск...
ADVANCE (ЗАДЕРЖАТЬ)
Прототип метода
УСТРОЙСТВА
Автомобильные брыз...
согласно требовани...
Логичность и миним...
Технические средст...
Поскольку процесс ...
Язык С++ : объявле...
Вызов функции чере...
Почему игроки выби...
Пошаговое выполнен...
Игры. Лучшие онлай...
Снова об интерфейс...
Создание и использ...
Различные модифика...
Программирование в...
Политики Accompli
Модель информацион...
Web-серверпозволяе...
Как осуществить ми...
Установка связи в ...
г) открытый ключ Дона
Разработать прикл...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?