Навигация
Главная
Поиск
Форум
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

Поиск пути в графе заданном списками инцедентности на Turbo Pascal
Информационная система - продуктовый магазин на Turbo Pascal (База данны...
Моделирование вычислительного центра на GPSS + Отчет + Блок схема

Добавление методов и событий в компонент
Созданный в примере 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 Комментариев · 14472 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
index.php + мод ...
Базы данных в Инт...
Рисование PopupMenu
Exe in exe
WAP версия сайта
Размещение элемен...
Длинный заголовок...
Turbo Pascal for ...
Просмотр коммент...
Карта сайта
Программирование ...
Blib [Исходник на...
Counter [Исходник...
Определние размер...
WordReport
EMS QuickExport S...
Пример работы с р...
Библия хакера 2. ...
StartMark
PHP: настольная к...

Топ загрузок
Приложение Клие... 100800
Delphi 7 Enterp... 98064
Converter AMR<-... 20303
GPSS World Stud... 17068
Borland C++Buil... 14261
Borland Delphi ... 10388
Turbo Pascal fo... 7398
Калькулятор [Ис... 6093
Visual Studio 2... 5241
Microsoft SQL S... 3676
Случайные статьи
dll) поддерживает ...
Введение
Задачи, использующ...
В качестве первого...
Активизация некот...
Файлы PostScript
Методы форматирования
Назначение и особе...
Чтобы заменить вст...
London\H RManagers...
Высота и ширина яч...
Помимо вызова акти...
Краткая характерис...
Добавление и удале...
Выбор технологии
Протоколы распреде...
Импорт статических...
Введение
Работа алгоритма л...
Некоторые миры
Инициализация объе...
Решения к главе 11
Служба удаленного ...
Перемещение окна в...
средствами IPSecШи...
Статистика



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


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