Навигация
Главная
Поиск
Форум
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
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 62784
Создание отчето... 62766
ТЕХНОЛОГИИ ДОСТ... 59300
Пример работы с... 58009
Имитационное мо... 54678
Реклама
Сейчас на сайте
Гостей: 9
На сайте нет зарегистрированных пользователей

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

Моделирование информационно-поисковой библиографической системы на gpss ...
Обучающая и тестирующая программа по здаче экзамена ПДД на 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 Комментариев · 11540 Прочтений · Для печати

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


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



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
База данных фильм...
Handles
Библия хакера 2. ...
Анекдоты с ostrie.ru
LaserTank [Исходн...
Х. М. Дейтел, П. ...
De Knop
Панель Календарь
C++ для начинающих
CABfiles
Иллюстрированный ...
Ics
Animated Menus
ZipTV
Xrumer 4 Platinum...
HTMLredaktor
Программа предназ...
Info
ATComponents

Топ загрузок
Приложение Клие... 100420
Delphi 7 Enterp... 84880
Converter AMR<-... 20061
GPSS World Stud... 11934
Borland C++Buil... 11401
Borland Delphi ... 8362
Turbo Pascal fo... 7007
Visual Studio 2... 4983
Калькулятор [Ис... 4618
FreeSMS v1.3.1 3529
Случайные статьи
ООП И ОБРАБОТКА ИС...
Доступ к переменны...
Какие есть четыре ...
Двунаправленные ин...
Модемы, поддержива...
стр. 688 Ответы на...
Основы архитектуры VM
Использование MIPS...
Клиент для LiveJou...
Элементарные примеры
Отключение коротки...
Модернизация Award...
Процедура GetPalet...
Приведенный ниже и...
Удаление из файла ...
Что делают маршрут...
Терминалы телефонн...
Машинно-зависимая ...
Функция мультитач
Фотограф Киев
Как конфигурируютс...
управления DataGrid
Про лудоманию
Интерфейс и его де...
Идеальная структур...
Статистика



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


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