Отправляет email-рассылки с помощью сервиса Sendsay

Delphi. Уроки

  Все выпуски  

Delphi. Уроки


Информационный Канал Subscribe.Ru

Delphi. Создание компонентов. Уроки по программированию с сайта http://progs.biz

Рассылка №17

Delphi. Создание компонентов. Урок 1. Введение в создание компонентов.
Delphi. Создание компонентов. Урок 2. Создаем первый компонент.
Delphi. Создание компонентов. Урок 3. Добавление свойств.

Полные версии уроков (с картинками) можно найти по адресам
Урок 1. Введение в создание компонентов.
Урок 2. Создаем первый компонент.
Урок 3. Добавление свойств.

Delphi. Создание компонент. Урок 1. Введение в создание компонентов

Что такое компоненты? Это самоастоятельные объекты, которые вы можете использовать в различных программах на Delphi (и на C++ Builder). Например, разные кнопочки, checkbox'ы, таймеры и более сложные обекты, которые вы видите на Палитре компонентов - это компоненты. Компоненты вы можете делать и сами - и как раз этому и посвящен этот раздел. Компоненты могут быть простыми (кнопочка, которая пишит при нажатии на нее) и очень сложными (встроенный WEB-браузер). Компоненты можно писать с нуля, определяя в них все методы, свойства и события, а можно воспользоваться некоторым уже готовым компонентом (классом компонета) и просто добавить в него то, что отсутствует в классе родителя. Или же переопределить методы родительского класса, если они работаю не так, как вам надо. Отметьте сразу, что обрать что-либо из родительского класса нельзя - если, скажем, некоторое свойство есть у родительского компонента, то оно будет и у компонента, произведенного от него.

Компоненты могут быть видимыми (как большинство), так и невидимыми (как таймер) на этапе выполнения. Также компонет может и часто должен различать два своих состояния - состояние на этапе разработки программы (не компонета, а именно программы), использующей компонент и состояние на этапе работы программы. Классический пример такого компонента - это таймер. Во время разработки программы он не "тикает", по время же работы программы - может "тикать" (т. е. посылать сообщение WM_TIMER).

Компоненты, которые вы разрабатываете, могут состоять из нескольких других компоненетов. Например, вы можете сделать компонент, представляющий из себя поле для ввода некоторых данных (Edit) и метку радом с ним (Label). Конечно, можно не заводить отдельный компонент, а использовать Edit и Label отдельно, но такой компонет позволяет делать многие операции автоматически (например, одновременное выравнивание Edit и Label), так что если вам приходиться заниматься этим достаточно много, то создание даже такого простого компонента может сэкономить массу времени.

Компонеты распространяются в виде отдельных файлов, так что установка в среды программирования Delphi или C++ Builder не займет много времени. Установленные компоненты появятся на Палитре компонентов - на отдельной или уже существующей вкладке. Разумеется, установленные компоненты можно будет потом при желании удалить. Компоненты, которые использует программа, могут непосредственно включаться в exe-файл, а могут и использоваться в отдельном файле. Второй вариант может оказаться предпочтительнее, если данный компонент использует несколько программ.

Часто компонеты третьих фирм распространяются вместе с исходным кодом, так что вы сможете при желании слегка "подправить" их код, исходя из вашей задачи.

Компоненты - это не единственная технология такого рода. Например, есть еще элементы ActiveX от Microsoft. В новой платформе .NET тоже можно делать пользовательские элементы. У каждой из этих технологий есть и плюсы, и минусы, которые сейчас мы обсуждать не будем.

Наверх

Delphi. Создание компонент. Урок 2. Создаем первый компонент

На этом занятии мы начнем создавать наш первый компонент TRandom (универсальная игральная кость). Его основная задача - это выдавать случайные числа от min до max (min и max будут в числе его свойств). Кроме того, у него будет метод Random, который , который и будет выдавать случайное число в указанных пределах. И, наконец, у компонента будет событие GetMax, которое будет возникать, когда на нашей "игральной кости" выпадет максимально возможное количество очков. Внешне наш компонент будет выглядеть как Label, т. е. выдаваемое им случайное число будет выводиться в виде надписи.

Для создания заготовки для нового компонента зайдите в меню Component и выберите New Component.

Появится окно New Component, в котором вам надо выбрать класс-предок для вашего компонента (combobox Ancestor type) - тут задайте TLabel [StdCtrls] (т. е. наш компонент - потомок класса TLabel), имя вашего класса (Class name) - тут можно впечатать все, что угодно, мы тут задали TRandom (хорошей практикой является задание для всех вашх компонентов некоторого префикса), вкладка на палитре компонентов для размещения нашего нового компонента (можно выбрать как существующую вкладку, так и задать свою) - мы задали свою вкладку с именем My Components. Значение остальных полей можно оставить без изменения - в Unit file name задается имя файла для компонента (по умолчанию предлагается имя класса без буквы T) и места на диске, в которых компонент будет искаться - тут тоже лучше все оставить как есть.

Нажимаем OK. Появится окно с некоторым количеством кода. Давайте посмотрим, что за код мы тут имеем. Во-первых, мы имеем заготовку для нашего класса:

...
type
  TRandom = class(TLabel)
  private
    { Private declarations }
  protected
    { Protected declarations }
  public
    { Public declarations }
  published
    { Published declarations }
  end;
  ...

Как вы видите, класс пока пуст - ничего содержательного.

Чуть пониже мы видим код для регистрации нашего компонента:

...
procedure Register;
begin
  RegisterComponents('My Components', [TRandom]);
end;
 ...

Функция RegisterComponents в качестве первого параметра имеет имя вкладки на Палитре компонентов, куда наш компонент будет проинсталлирован и вторым - имя класса самого компонента.

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

Наверх

Delphi. Создание компонент. Урок 3. Добавление свойств

Подолжаем работать с компонентом, который мы начали на прошлом занятии.

У нашего компонента дожно быть два свойства - min и max для задания минимальной и максимальной границ для выдаваемого случайного числа. Делаем это следующим образом:

  ...
  TRandom = class(TLabel)
  private
    { Private declarations }
    Fmin: Integer;
    Fmax: Integer;
    ...
  published
    { Published declarations }
    property min: Integer read Fmin write Fmin;
    property max: Integer read Fmax write Fmax;
  end;
  ...

Свойство min (и абсолютно аналогичное свойство max) мы заводим следующим образом - во-первых, мы объявляем в классе закрытую переменную Fmin нужного типа и во-вторых, мы в разделе published нашего класса объявляем само свойство. Свойство объявляется с помощью ключевого слова property, за которым следут имя свойства (min), его тип (Integer в данном случае) и как мы это свойство читаем и записываем. Так как наше свойство min это, фактически, внутренная переменная Fmin, то после слов read и write мы соответственно пишем имя этой переменной класса. Так как мы поместили свойства в published-секцию нашего класса, то эти свойства появятся в Инспекторе объектов. Если нам надо сделать свойство только для чтения или только для записи, то в этом случае надо писать лишь части read или write, соответственно.

Заметьте, кстати, что имена внутренних поле принято начинать на букву F - чтобы сразу было понятно, что это имя поля.

Пока наши свойства имеют обычный тип (Integer). На последующих занятиях мы посмотрим, как можно задавать перечисляемые свойства, объектные и другие.

Наверх

Другие рассылки с сайта progs.biz:

Рассылки Subscribe.Ru
Visual Basic. Уроки.
Сайтостроение
  • Уроки по Visual Basic с сайта progs.biz по различным темам. VB.NET (классы, элементы управления, создание собственных элементов), ActiveX, примеры и исходники, FAQ и многое другое
  • Уроки по WEB-программированию и дизайну с progs.biz. Основные направления - HTML, PHP, ASP, PhotoShop, SSI.

Copyright Алексеев Игорь, 2002

Copyright Шмидт Отто, 2002

Copyright сайт progs.biz, 2002



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное