Библиотека визуальных компонентов VCL и ее базовые классы 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Библиотека визуальных компонентов VCL и ее базовые классы



Все классы библиотеки визуальных компонентов произошли от группы базовых классов, которые лежат в основе иерархии VCL. Самый общий предок компонентов — это класс TObject, инкапсулирующий простейший объект. Как известно (см. гл. 1), каждый объект наследует свойства и методы родительского класса. К объекту можно добавить новые свойства и методы, но нельзя удалить унаследованные. Объект-наследник в свою очередь может стать родительским для нового класса, который унаследует возможности всех своих предков.

Поэтому иерархия базовых классов VCL продумана чрезвычайно тщательно — ведь на их основе создано все множество компонентов, используемых в Delphi. Особое место среди базовых классов, помимо TObject, занимают TComponent (от него происходят все компоненты) и TControl(от него происходят все элементы управления).

 

 

Когда создается новое приложение, на основании этих классов система Delphi 7

формирует новый тип данных, наследующий характеристики своего родителя:

type

TForml = class(TForm1)

private

{ Private declarations }

public

{ Public declarations }

end;

Форма Forml представлена в программе типом TForml, который исходно не имеет

новых полей и методов, так как форма пуста. В дальнейшем члены класса TForml

будут добавляться по мере необходимости, как автоматически (при размещении

их на форме в Проектировщике форм), так и самим программистом.

Далее в модуле следует раздел реализации, в котором имеется всего одна директива

компилятора

{$R *.DFM)

Она предназначена для связывания модуля с описанием соответствующей ему формы.

ЗАМЕЧАНИЕ Описание формы и всех размещенных на ней компонентов система

Delphi 7 хранит в файлах с расширением.DFM. Эти файлы имеют бычный текстовый формат (в отличие от прежних версий Delphi, де они хранились в двоичном виде, что делало невозможным их нализ и ручное редактирование).

 

Создаваемая в среде Delphi 7 программа состоит из нескольких файлов. Это файлы с

исходными текстами на Паскале и файлы описаний форм. Все они связаны друг с

другом. Кроме того, в среде Delphi 7 имеется множество настроек, которые желательно

сохранять на жестком диске в промежутках между сеансами работы с системой.

Такой набор файлов, в которых содержатся исходные тексты и различные настройки,

называется проектом. Разделение на проекты очень удобно, потому что позволяет

выделить все файлы, относящиеся к конкретной задаче, в отдельную группу.

Чтобы сохранить текущий проект, надо выполнить команду File >Save All

(Файл > Сохранить все) или щелкнуть на одноименной командной кнопке.

Сначала разработчику будет предложено сохранить файл с исходным текстом Unitl.pas), а затем — файл проекта Project1с расширением.DPR. Сохранять их лучше в отдельном каталоге, специально отведенном для данного проекта. В этом же каталоге компилятор в будущем создаст и исполнимое приложение.

Теперь можно приступать к этапу проектирования пользовательского интерфейса —

подготовке внешнего вида окна программы и размещению на нем элементов управления. Для этого надо переключиться в Проектировщик форм с помощью клавиши F12 или командной кнопки Toggle Form/Unit (Выбрать Форму/Модуль).

Проектировщик форм работает по принципу WYSIWYG, в соответствии с которым

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

товлено в Проектировщике форм. Например, изменить размер формы можно стан-

дартным способом для системы Windows протягиванием мыши.

ВНИМАНИЕ Создаваемая в Проектировщике форма — это только внешнее представление будущего окна, а не работоспособное приложение.

 

Любой объект Пректировщика форм доступен в исходном тексте программы по его

имени. Имя (или название) объекта — это одно из его свойств, которые можно изме-

нять и настраивать в Инспекторе объектов. Соответствующее свойство называется

Name (Имя). Оно имеется у всех объектов без исключения и расположено в Инспекторе объектов в категории Miscellaneous (Дополнительныв) (рис. 2.2, стр 100).

Первоначально значением этого свойства является строка Forml, сгенерированная

системой Delphi 7 автоматически.

 

ЗАМЕЧАНИЕ Общепринято определять назвонив компонента в соответствии с

названием класса.

Разместить на форме новый компонент не представляет труда. Для этого сначала нужно его выбрать (щелкнуть по нему мышью) в палитре компонентов, а затем щелкнуть мышью по точке рабочего пространства формы, где должен располагаться левый верхний угол компонента. Первоначальные размеры и положение компонента на форме легко изменяются мышью, поэтому добиваться полного сходства с рисунком необязательно.Как только вы начнете вводить новую надпись, вид компонента на форме начнет меняться, динамически отражая все изменения, производимые вами в окне Инспектора объектов.Delphi обладает замечательной способностью визуальной реализации любых изменений свойств компонента не только на этапе прогона программы, но и на этапе проектирования формы.

 

ЗАМЕЧАНИЕ После размещения объектов на форме их можно свободно перетаскивать при помощи мыши в другое место, причем не только по одному, но и группой. Для этого надо выделить группу элементов протягиванием (они помечаются серыми маркерами) и переместить их как один объект.

 

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

С помощью обрамляющих черных квадратиков можно изменять размеры компонента. Для этого следует поместить острие указателя мыши над одним из них (в этот момент указатель меняет свою форму на двунаправленную стрелку), затем нажать левую кнопку мыши и, не отпуская ее, буксировать сторону или угол компонента в нужном направлении, после чего отпустить кнопку.

Замечу, что все видимые компоненты[ В Delphi могут использоваться как видимые, так и невидимые компоненты. Невидимые компоненты не имеют визуального отображения на этапе прогона программы. ] имеют свойства Left (Слева), тор (Сверху), width (Ширина) и Height (Высота), числовые значения которых определяют положение левого верхнего угла компонента и его размеры в так называемых пикселях, т. е. в минимальных по размеру точках экрана, светимостью которых может управлять программа. При буксировании компонента или изменении его размеров мышью эти значения автоматически меняются и наоборот - изменение этих свойств в окне Инспектора объектов приводит к соответствующему изменению положения и размеров компонента. В Delphi 4, 5 и 6 значения Left и тор автоматически появляются в небольшом окне рядом с указателем мыши при буксировке компонента по форме.

РЕАКЦИЯ НА СОБЫТИЯ

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

3.3.1. Модификация формы

Проведем очередную модернизацию нашей первой программы: вставим в ее форму еще один компонент - кнопку - и заставим ее откликаться на событие, связанное с нажатием левой кнопки мыши.

Компонент кнопка изображается пиктограммой на странице standard палитры компонентов. Поместите этот компонент на форму и расположите его ниже метки и посередине формы (рис. 3.2).

3.3.2. Обработчик события OnClick

При щелчке по кнопке мышью в работающей программе возникает событие OnClick. (По щелчку). Пока это событие никак не обрабатывается программой, и поэтому “нажатие” кнопки не приведет ни к каким последствиям. Чтобы заставить программу реагировать на нажатие кнопки, необходимо написать на языке object pascal фрагмент программы, который называется обработчиком события.

Рис. 3.2 Форма со вставленной кнопкой

Этот фрагмент должен представлять собой последовательность текстовых строк, в которых программист указывает, что именно должна делать программа в ответ на нажатие кнопки. Фрагмент оформляется в виде специальной подпрограммы языка Object Pascal - процедуры.

Чтобы заставить Delphi самостоятельно сделать заготовку для процедуры обработчика события OnClick, дважды подряд без заметной паузы щелкните мышью по вновь вставленному компоненту[ У начинающего пользователя Windows не всегда получается двойной щелчок. Этот нехитрый прием широко используется и в Windows, и в Delphi, так что вам придется потренироваться в его освоении: без него Delphi не вставит заготовку процедуры, и вам понадобится самостоятельно писать не только этот текст, но и производить дополнительные манипуляции с Инспектором объектов и окном кода. ]. В ответ Delphi активизирует окно кода, и вы увидите в нем такой текстовый фрагмент:

procedure TFormI.ButtonlClick(Sender: TObject);

Begin

end;

Попробуем разобраться в том, что он содержит. Слово procedure извещает компилятор о начале подпрограммы-процедуры (в Delphi могут использоваться также подпрограммы-функции; в этом случае вместо procedure (процедура) используется слово function (функция); разницу между процедурами и функциями мы обсудим позже). За ним следует имя процедуры TFormi.ButtonlClick. Это имя - составное: оно состоит из имени класса TForm1 и собственно имени процедуры Button1Click.

Классами в Delphi называются функционально законченные фрагменты программ, служащие образцами для создания подобных себе экземпляров. Однажды создав класс, программист может включать его экземпляры (копии) в разные программы или в разные места одной и той же программы. Такой подход способствует максимально высокой продуктивности программирования за счет использования ранее написанных фрагментов программ. В состав Delphi входит несколько сотен классов, созданных программистами корпорации Borland (так называемых стандартных классов). Совокупность стандартных классов определяет мощные возможности этой системы программирования.

Каждый компонент принадлежит к строго определенному классу, а все конкретные экземпляры компонентов, вставляемые в форму, получают имя класса с добавленным числовым индексом. По используемому в Delphi соглашению все имена классов начинаются с буквы Т. Таким образом, имя TFormi означает имя класса, созданного по образцу стандартного класса TForm. Если вы посмотрите начало текста в окне кода, то увидите следующие строки:

Type

TFormi = class(TForm)

Button1: TButton;

Label1: TLabel;

procedure ButtonlClick(Sender: TObject);

Private

{ Private declarations }

Public

{ Public declarations }

end;

var Form1: TForm1;

Строка

TForm1 = class(TForm)

определяет новый класс Tform1, которыйпорожден от (создан по образцу) стандартного класса TForm. Строка

Form1: Tform1;

создаетэкземпляр этого класса с именем Formi. Стандартный класс TForm описывает пустое Windows-окно, в то время как класс TFormI описывает окно с уже вставленными в него компонентами метка и кнопка. Описание этих компонентов содержат строки

Button1: TButton;

Label 1: TLabel;

Они указывают, что компонент Buttoni (Кнопка!) представляет собой экземпляр стандартного класса TButton, а компонент Label 1 (Метка 1) - экземпляр класса TLabel.

За именем процедуры TFormi. Buttoniciick в круглых скобках следует описание параметра вызова

Sender: TObject

(параметр с именем Sender принадлежит классу TObject). Как мы увидим дальше, процедуры могут иметь не один, а несколько параметров вызова или не иметь их вовсе. Параметры вызова (если они есть) служат для настройки реализованного в процедуре алгоритма на выполнение конкретной работы. Параметр Sender вставлен Delphi “на всякий случай”: с его помощью подпрограмма Button1Click может при желании определить, какой именно компонент создал событие OnClick. Вся строка в целом

procedure TFormI.Buttoniciick(Sender: TObject);

называетсязаголовком процедуры. Ее завершает символ “;”. Этот символ играет важную роль в Object Pascal, т. к. показывает компи-- лятору на конецпредложения языка. Из отдельных предложений составляется весь текст программы. В конце каждого предложения нужно ставить точку с запятой - это обязательное требование синтаксиса языка.

Три следующие строки определяюттело процедуры:

Begin

end;

Слово begin (начало) сигнализирует компилятору о начале последовательности предложений, описывающих алгоритм работы процедуры, а слово end (конец) - о конце этой последовательности. В нашем случае тело процедуры пока еще не содержит описания каких-либо действий, что и неудивительно: Delphi лишь создала заготовку для процедуры, но она ничего “не знает” о том, для чего эта процедура предназначена. Наполнить тело нужными предложениями -задача программиста.

Для нас важно то обстоятельство, что каждый раз при нажатии кнопки Button1 управление будет передаваться в тело процедуры, а значит, между словами begin и end мы можем написать фрагмент программы, который будет выполняться в ответ на это событие.

Чтобы убедиться в этом, сделаем нашу кнопку “звучащей”: напишите в пустой строке между словами begin...end следующее предложение:

MessageBeep (МВ_ОК);

и сделайте прогон программы[ Если вы работаете с версией Delphi 1, используйте строку MessageBeep (0); ], предварительно включив звуковую систему компьютера. Теперь в ответ на нажатие кнопки Button1 в динамике компьютера будет раздаваться звуковой сигнал, т. к. вставленная строка реализует обращение к стандартной процедуре, которая умеет извлекать из динамика различные стандартные для Windows звуки.

3.3.3. Динамическое изменение свойств компонента

Поскольку кнопка Buttoni в нашей программе способна “звучать”, полезно изменить ее надпись: вместо умалчиваемой надписи Buttoni, которую автоматически формирует Delphi по имени компонента, назовем кнопку, например, “Звук”. Проще всего это сделать с помощью окна формы и Инспектора объектов, т. е. на этапе конструирования формы (для этого нужно просто изменить свойство caption компонента Button1 в окне Инспектора объектов), но для более полного знакомства с Delphi мы рассмотрим другой способ - динамического[ К сожалению, эта процедура работает не всегда: если ваш ПК не оснащен звуковой картой, динамик будет молчать. В этом случае вместо MessageBeep (MB_OK) напишите просто Веер. Изменения на этапе конструирования называются статическими, а в ходе прогона программы - динамическими. ] изменения надписи на этапе прогона программы. Для этого создадим обработчик события OnCreate (По созданию) для формы и изменим в нем это свойство.

Событие OnCreate возникает после создания windows-окна, но до появления этого окна на экране. Чтобы создать обработчик этого события, раскройте список компонентов в верхней части окна Инспектора объектов, выберите компонент Formi и дважды щелкните по свойству OnCreate на странице Events этого компонента (щелкать нужно по правой части строки oncreate). В ответ Delphi вновь активизирует окно кода и покажет вам заготовку для процедуры TForm1. FormCreate. Отредактируйте ее следующим образом:

procedure TFormi.FormCreate(Sender: TObject);

begin

Button1.Caption:= 'Звук';

end;

Единственная вставленная нами строка представляет собой так называемыйоператор присваивания языка Object Pascal. В левой части оператора указывается свойство Buttoni. caption, а в правой части - значение ' звук ', которое мы хотим придать этому свойству. Связывает обе части комбинация символов “: =”, которая читается как “присвоить значение”. Символы “:=” всегда пишутся слитно, без разделяющих пробелов, хотя перед двоеточием и после знака равенства можно для лучшей читаемости программы вставлять пробелы, что мы и сделали. Как и любое другое предложение языка, оператор присваивания завершается точкой с запятой.

Составное имя Button1.Caption необходимо для точного указания компилятору, о каком свойстве идет речь: в нашей программе используются три компонента (включая саму форму), каждый из которых имеет свойство Caption; уточняющий префикс Button1 заставит изменить это свойство у кнопки, а не у метки или формы. Присваиваемое свойству значение является текстовой строкой. По правилам Object Pascal текстовая строка должна заключаться в обрамляющие апострофы. Внутри апострофов можно написать любое количество произвольных символов - именно они (без обрамляющих апострофов) будут определять новую надпись на кнопке.

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

НЕКОТОРЫЕ ИТОГИ

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

  • Процесс создания Delphi-программы разбивается на две фазы: фазу конструирования формы и фазу кодирования.
  • Конструирование формы осуществляется с помощью выбора компонентов из палитры и размещения их на форме.
  • Программист может перемещать любой размещенный на форме компонент и изменять его размеры с помощью мыши.
  • Чтобы придать компоненту нужные свойства, используется страница Properties Инспектора объектов.
  • Чтобы компонент мог откликаться на то или иное событие, программист должен создать обработчик события и указать его имя на странице Events Инспектора объектов.
  • Обработчик события оформляется в виде процедуры, имеющей составное имя. Первая часть имени представляет собой имя класса для формы, вторая часть отделяется от первой точкой и может быть произвольной. Если Delphi автоматически формирует заготовку для обработчика, то вторая часть имени представляет собой объединение имени компонента и имени события без предлога On.
  • Тело процедуры ограничено словами begin... end и состоит из отдельных предложений (операторов) языка Object Pascal. В конце каждого предложения ставится точка с запятой.
  • Свойства компонента могут изменяться на этапе прогона программы.

После загрузки на экране появится главное окно.

Верхнею часть окна занимает меню и панель инструментов. В левой части окна находятся Object TreeViewи Object Inspector. В центре находится форма разрабатываемого приложения и форма для внесения кода.

Object TreeView – служит для отображения всех объектов расположенных на текущей форме разрабатываемого проекта.

Object Inspector – служит для отображения и редактирование свойств компонентов расположенных на форме разрабатываемого приложения.

Теперь введем понятия «проект». Проект – это совокупность файлов, которые используются средой разработки для итоговой генерации программы. Когда мы будем создавать с вами первый проект, то познакомимся со всеми составляющими проекта и его структурой.

Теперь рассмотрим состав главного меню. Оно позволяет вызывать все инструменты, необходимые для работы с проектом. Рассмотрим назначение раздела меню и связанные с ними функции:

File – содержит набор команд для работы с файлами, позволяет создавать новые проекты, добавлять новые файлы в проект на основе различных шаблонов, переименовывать файлы проекта, а также распечатывать их. Сюда же включена команда закрытия среды разработки;

Edit – здесь, в соответствии с названием, расположены команды, предназначенные для редактирования текста, удаления и перемещения его в буфер обмена, вставки текста из буфера и отмены операций редактировании. Стоит отметить, что все эти команды работают не только с текстом, но и с компонентами в конструкторе форм – элементами управления, из которых «собирается» интерфейс приложения. Кроме того, здесь же сосредоточены команды управления положением компонентов на поверхности формы, а также фиксации компонентов – функции, позволяющей заблокировать компоненты, что бы в последствии его случайно не изменить;

Search – содержит набор команд для работы с текстом, его поиска и замены, причем и то и другое может производится как в одном файле, так и во всех файлах проекта, либо в любом каталоге и его подкаталогах;

View – под этим названием объединены команды вызова инструмента управления проектом, такие как инспектор объектов, конструктор форм, менеджер проектов и т.д.;

Project – предназначен для того чтобы добавлять и удалять модули проекта, сохранять проект в репозитории, добавлять проекты в группу и убирать их из неё, компилировать как отдельные проекты, так и все проекты в группе, загружать файл самого проекта в редактор кода, а также вызывать диалог настройки свойств проекта;

Run – позволяет запускать проект на выполнение как под отладчиком, так и без него, конфигурировать строку параметров проекта при запуске, производить отладку, задать точки останова, осуществлять пошаговое выполнение кода, просматривать значения переменных и изменять их;

Component – здесь сосредоточены команды, предназначенные для установки новых компонентов и пакетов компонентов и создания новых компонентов и шаблонов компонентов;

Database – здесь сосредоточены команды управления базами дынных;

Tools – позволяет настраивать свойства рабочей среды Delphi и отладчика, произвести настройки репозитория, добавлять и удалять дополнительные утилиты, а так же команды запуска этих самых утилит;

Window – позволяет переключаться между окнами, если вы отроете какой – либо модуль для редактирования в новом окне;

Help – объединяет команды вызова справочной системы Delphi и её настройки, а так же позволяет обратиться к Web-ресурсам компании Borland для получения дополнительной информации.

Теперь рассмотрим панель инструментов. Вы можете настроить панель инструментов таким образом, что бы вам было удобно работать. Для этого нужно вызвать диалоговое окно по ссылке View-Toolbars-Customize. На закладке Toolbars вы можете выбрать те группы кнопок, которые желаете видеть на панели инструментов. Вам следует снять флажок слева от имени группы, чтобы скрыть её, и поставить – чтобы показать. Закладка Commands, позволяет указать, какие кнопки нужно показать в группе. Настройка выполняется следующим образом. Если вы хотите добавить кнопку на панель инструментов, то нажмите и удерживайте левую кнопку мыши на названии этой кнопки в списке Commands, перетащите её на панель инструментов и там отпустите кнопку мыши. Если вы хотите скрыть какую-либо кнопку, то подобным образом перетащите её в обратном направлении с панели инструментов на окно диалога настройки. В дополнение к этому на закладке Options данного окна вы можете установить показывать или нет подсказки при перемещении курсора мыши над кнопками панели инструментов (флажок Show tooltips) и включить или нет в подсказку комбинации «быстрых» клавиш для вызова команды, запускаемой щелчком по кнопке (флажок Show shortcut keys on tooltips).

Ниже будут перечислены и описаны некоторые палитры компонентов:

Standard. Большинство компонентов на этой странице являются аналогами экранных элементов самой Windows. Меню, кнопки, полосы прокрутки — здесь есть все. Но компоненты Delphi обладают также некоторыми удобными дополнительными встроенными возможностям.

Additional. Эта страница содержит более развитые компоненты. Данная страница также содержит компоненты, главное назначение которых — отображение графической информации. Компонент Image загружает и отображает растровые изображения, а компонент Shape, украсит ваши формы окружностями, квадратами и т.д.

System. Страница System содержит компоненты, обрабатывающие обмен высокого уровня между программами посредством OLE (Object Linking and Embedding). А компонент Timer может генерировать события через определенные, заранее установленные промежутки времени.

Win32. Эта страница содержит компоненты, позволяющие созданным с помощью Delphi программам использовать такие нововведения в пользовательском интерфейсе 32-разрядной Windows, как просмотр древовидных структур, просмотр списков, панель состояния, присутствующая в интерфейсе программы Windows Explorer (Проводник), расширенный текстовый редактор и др.

Dialogs. Windows ввела в употребление стандартные диалоговые окна для операций над файлами, выбора шрифтов, цветов и т.д. Однако для использования их в обычной программе Windows может потребоваться написать немало вспомогательного кода. Страница, Dialogs предоставляет программам Delphi простой доступ к этим стандартным диалоговым окнам.

Data Access и Data Controls. Delphi использует механизм баз данных компании Borland (Borland Database Engine, BDE) для организации доступа к файлам баз данных различных форматов. Компоненты этих двух страниц облегчают программам Delphi использование сервиса баз данных, предоставляемого BDE, например многопользовательского считывания, записи, индексации и выдачи запросов для таблиц dBASE и Paradox. С использованием этих компонентов создание программы просмотра и редактирования базы данных почти не требует программирования.

Win 3.1. На этой странице, как в сибирской ссылке, находятся компоненты Delphi 1.0, возможности которых перекрываются аналогичными компонентами Windows XP.

Internet. Эта страница предоставляет компоненты для разработки приложений, позволяющих создавать HTML-файлы непосредственно из файлов баз данных и других типов, взаимодействующих с другими приложениями для Internet. Delphi дает вам возможность создавать приложения для Web-сервера в виде DLL-файлов: (Dynamic Link Library — Динамически компонуемая библиотека), способных содержать невизуальные компоненты. С помощью компонентов страницы Internet довольно просто создавать обработчики событий для обращения к определенному URL (Uniform Resource Locator — Унифицированный локатор ресурса), представлению документов в HTML-формате и пересылки их клиент-программе.

Samples. Эта отличающаяся полнотой страница содержит компоненты, которые не встроены в Delphi, но демонстрируют мощь системы компонентов. Для этих компонентов нет встроенной интерактивной справки. Все же они не менее полезны, чем компоненты с других страниц.

ActiveX. Эта страница содержит компоненты ActiveX, разработанные независимыми производителями программного обеспечения: сетка, диаграмма, средство проверки правописания.

QReport. Эта страница предоставляет компоненты баз данных. Здесь содержатся особые версии надписей, полей, примечаний и других элементов управления.

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

Теперь перейдем к инспектору объектов (Object Inspector). Он имеет две вкладки Properties (Свойства) и Events (События). Первая вкладка предназначена для редактирования свойств объектов. Объект может обладать различными свойствами, и эти свойства могут объединяться в группы. Вторая вкладка используется для описания событий, на которые будет реагировать выделенный объект.

 

Особенности доступа к свойствам компонентов и рекомендации по использованию свойств

Для доступа к свойствам компонента, значок которого расположен на форме (или для доступа к свойствам формы), достаточно навести указатель "мыши" на этот значок (для формы – на участок формы, не занятый значками) и выполнить один щелчок левой кнопкой "мыши", после чего при открытой вкладке Properties окна Object Inspector, будет получен доступ к свойствам компонента (или формы).

Кроме того, для доступа к свойствам можно использовать значки компонентов и формы в окне Object TreeView или строки раскрывающегося списка с именами компонентов в верхней части окна Object Inspector.

Не рекомендуется оставлять неизменными предлагаемые по умолчанию для компонентов и формы значения свойства Caption, а также значения тех других свойств, которые (значения) могут быть видны в окне выполняемого приложения (такие, например, как Form1, Button1, Edit1 и т.п.).

 

Особенности использования обработчиков событий и рекомендации по их использованию

Для создания в окне модуля проекта обработчика заданного события для какого-либо компонента (или формы) можно тем или иным способом выбрать этот компонент (или форму) по аналогии со способами выбора компонента для изменения его свойств и затем на вкладке Events окна Object Inspector найти строку с заданным событием, в этой же строке навести указатель "мыши" на область раскрывающегося списка правее названия события и выполнить двойной щелчок левой кнопкой "мыши".

При этом в окне модуля будет создана "пустая" процедура обработчика именно заданного события.

Для того чтобы использовать для обработки заданного события уже имеющийся обработчик событий, достаточно на вкладке Events окна Object Inspector найти строку с заданным событием и в этой же строке в области раскрывающегося списка правее названия события выбрать один из имеющихся обработчиков событий.

Для быстрого доступа к обработчикам событий компонента, значок которого расположен на форме (или к обработчикам событий формы), достаточно навести указатель "мыши" на этот значок (для формы – на участок формы, не занятый значками) и выполнить двойной щелчок левой кнопкой "мыши".

В процедуре обработчика события рекомендуется вводить инструкции (операторы) только между строками с begin и end;. Настоятельно не рекомендуется без достаточного опыта работы со средой программирования "трогать" чем-либо, кроме комментариев, эти строки с begin и end;, строку с именем и параметрами созданной процедуры, а также последнюю строку модуля, содержащую end..

44. RTTI (Run - time type information (RTTI) - это специальный механизм определения типа объекта во время выполнения. )в программе на Delphi. Использование RTTI для работы с ресурсами форм.

Delphi — это мощная среда визуальной разработки программ сочетающая в себе весьма простой и эффективный язык программирования, удивительный по быстроте компилятор и подкупающую открытость (в состав Delphi входят исходные тексты стандартных модулей и практически всех компонент библиотеки VCL). Однако, как и на солнце, так и в Delphi существуют пятна (на солнце черные, а в Delphi — белые), пятна недокументированных (или почти не документированных) возможностей. Одно из таких пятен — это информация о типах времени исполнения и методы работы с ней.

Информация о типах времени исполнения. (Runtime Type Information, RTTI) —это данные, генерируемые компилятором Delphi о большинстве объектов вашей программы. RTTI представляет собой возможность языка, обеспечивающее приложение информацией об объектах (его имя, размер экземпляра, указатели на класс-предок, имя класса и т. д.) и о простых типах во время работы программы. Сама среда разработки использует RTTI для доступа к значениям свойств компонент, сохраняемых и считываемых из dfm-файлов и для отображения их в Object Inspector,

Компилятор Delphi генерирует runtime информацию для простых типов, используемых в программе, автоматически. Для объектов, RTTI информация генерируется компилятором для свойств и методов, описанных в секции published в следующих случаях:

1. Объект унаследован от объекта, дня которого генерируется такая информация. В качестве примера можно назвать объект TPersistent.

2. Декларация класса обрамлена директивами компилятора {$M+} и {$M-}.

Необходимо отметить, что published свойства ограничены по типу данных. Они могут быть перечисляемым типом, строковым типом, классом, интерфейсом или событием (указатель на метод класса). Также могут использоваться множества (set), если верхний и нижний пределы их базового типа имеют порядковые значения между 0 и 31 (иначе говоря, множество должно помещаться в байте, слове или двойном слове). Также можно иметь published свойство любого из вещественных типов (за исключением Real48). Свойство-массив не может быть published. Все методы могут быть published, но класс не может иметь два или более перегруженных метода с одинаковыми именами. Члены класса могут быть published, только если они являются классом или интерфейсом.

Корневой базовый класс для всех VCL объектов и компонент, TObject, содержит ряд методов для работы с runtime информацией. Наиболее часто используемые из них приведены в таблице

ClassType

Возвращает тип класса объекта. Вызывается неявно компилятором при определении типа объекта при использовании операторов is и as

ClassName

Возвращает строку, содержащую название класса объекта. Например, для объекта типа TForm вызов этой функции вернет строку " TForm "

ClassInfo

Возвращает указатель на runtime информацию объекта

 

Object Pascal предоставляет в распоряжение программиста два оператора, работа которых основана на неявном для программиста использовании RTTI информации. Это операторы is и as. Оператор is предназначен для проверки соответствия экземпляраобъекта заданному объектному типу. Так, выражение вида:

AObject is TSomeObjectType

является истинным в том случае, если объект AObject является экземпляром класса TSomeObjectType или одного из порожденных от него классов. Следует отметить, что определенная проверка происходит еще на этапе компиляции программы. если фактические объект и класс несовместимы, компилятор выдаст ошибку в этом операторе. Так, следующий программный код

if Edit1 is TForm

then ShowMessage('Враки!');

даже не будет пропущен компилятором, и он выдаст сообщение о не совместимости типов (разумеется, что Edit1 — это компонент типа TEdit):

Incompatible types: 'TForm' and 'TEdit'.

Перейдем теперь к оператору as. Он введен в язык специально для приведения объектных типов. Посредством него можно рассматривать экземпляр объекта как принадлежащий к другому совместимому типу:

AObject as TSomeObjectType

Использование оператора as отличается от обычного способа приведения типов

TSomeObjectType(AObject)

наличием проверки на совместимость типов. Так при попытке приведения этого оператора с несовместимым типом он сгенерирует исключение EInvalidCast. Определенным недостатком операторов is и as является то, что присваиваемый фактически тип должен быть известен на этапе компиляции программы и поэтому на месте TSomeObjectType не может стоять переменная указателя на класс.

Для иллюстрации только что написанного рассмотрим небольшой пример. Предположим у вас на форме имеется ряд компонент типа TEdit, и вы хотите реализовать их очистку их свойств перед созданием формы. С применением RTT I это можно сделать следующим программным кодом:

var
I: Integer;
begin
for I:= 0 to ComponentCount - 1 do
if Components[I] is TEdit then
(Components[I] as TEdit).Text:= '';
{ или так TEdit (Components[I]).Text:= ''; }
end;

Хочу обратить ваше внимание, а то, что стандартное приведение типа в данном примере предпочтительнее, поскольку в операторе if мы уже установили что компонент является объектом нужного нам типа и дополнительная проверка соответствия типов, проводимая оператором as, нам уже не нужна.



Поделиться:


Последнее изменение этой страницы: 2017-02-21; просмотров: 354; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.233.223.189 (0.111 с.)