Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Содержание сайт... 65535
Вызов хранимых ... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Организация зап... 64649
Создание потоко... 62136
Модуль Forms 61249
Создание отчето... 61202
ТЕХНОЛОГИИ ДОСТ... 57662
Пример работы с... 55174
Имитационное мо... 53053
Реклама
Сейчас на сайте
Гостей: 6
На сайте нет зарегистрированных пользователей

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

База данных студентов на Delphi + Microsoft SQL Server
База данных студентов на Turbo Pascal (Списки) + Пояснительная записка
Моделирование работы обрабатывающего участка цеха в GPSS

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Добавление методов и событий в компонент
Созданный в примере 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 17:28:13 · 0 Комментариев · 11237 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
Win-Prolog 3.618
Billenium Effects...
NotePad Pro [Исхо...
Профессиональное ...
Дешифратор содерж...
Pro-Download Sys...
JanReplace
TMS
Мод "проверочный ...
Панель случайной ...
Импорт новостей ...
Система баннеро...
RbControls
Comdrv
Dynamic Titles дл...
Web Регистрация
Printgrid
Самоучитель PHP 4
AboutSystem
DragMe [Исходник ...

Топ загрузок
Приложение Клие... 100384
Delphi 7 Enterp... 83564
Converter AMR<-... 20051
GPSS World Stud... 11314
Borland C++Buil... 11245
Borland Delphi ... 8184
Turbo Pascal fo... 6987
Visual Studio 2... 4970
Калькулятор [Ис... 4420
FreeSMS v1.3.1 3516
Случайные статьи
Создание пользоват...
Кнопка фиксации ав...
Колебательные проц...
Где мы находимся?
4.3.1. Подтвержде...
Canon: настройки д...
Информеры, зачем о...
Параметрические ко...
Свойству AutoPostBack
Модифицированные ...
Обращение к памяти...
Потоки ввода-вывод...
Объект PageSetup
В четвертой главе ...
Надписи
Таблица Customers ...
использования в их...
почтовым сервером,...
Прячем программу д...
Металлические опор...
Глава 5
Таким образом гара...
РЕШЕНИЕ: УПРОЩЕНИЕ...
Studio, то объект ...
Поддержка 32-битны...
Статистика



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


  • Здесь
  • Двери для гостиниц, производство, различная отделка, сертификаты! Акция
  • dveri.zavod-armada.ru
Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?