4611

Основные понятия класса, объекта и основных компонентов, используемых в Delphi

Реферат

Информатика, кибернетика и программирование

Наследуя все лучшие стороны языка Pascal и дополняя их современными технологиями программирования, основанными на идеологии объектно-ориентированного программирования, язык Delphi позволяет разработчикам использовать все важнейшие достижени...

Русский

2012-11-23

899.5 KB

76 чел.

Введение

Наследуя все лучшие стороны языка Pascal и дополняя их современными технологиями программирования, основанными на идеологии объектно-ориентированного программирования, язык Delphi позволяет разработчикам использовать все важнейшие достижения в области программирования.


1. ПОНЯТИЕ КЛАССА И ОБЪЕКТА

Базовым в объектно-ориентированном программировании является понятие класса. Класс имеет заранее заданные свойства. Состояние класса задается значениями его полей. Класс решает определенные задачи, т.е. располагает методами решения. Но сам класс непосредственно не используется в программах. Образно говоря, класс — это шаблон, на основе которого создаются экземпляры класса, или объекты. Программа, написанная с использованием ООП, состоит из объектов, которые могут взаимодействовать между собой.

Например, как только вы создаете новое приложение типа Application в среде Delphi, в редакторе кодов автоматически появляется объявление класса Tform1, которое выглядит так. type

 Tform1 = class(TForm)

 private

   { Private declarations }

 public

   { Public declarations }

 end ;

Это можно рассматривать как заготовку для разработки класса. Затем создается объект (переменная или экземпляр класса) типа Tform1.

var

  Form1: Tform1;

Таким образом, класс объявляется как обычный тип, а объект создается как любая переменная. Ниже перечислены основные понятия, связанные с классами.

Инкапсуляция. Данные, методы их обработки и детали реализации скрыты от внешнего пользователя объекта. Преимущества инкапсуляции заключаются в модульности и изоляции кода объекта от другого кода программы,

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

Полиморфизм. Аналогом слова "полиморфизм" будет словосочетание "много форм". В данном случае под этим подразумевается, что вызов метода объекта для переменной приведет к выполнению кода, конкретного экземпляра класса, соответствующего данной переменной.

Поле можно определить как переменную экземпляра, представляющую собой данные конкретного объекта. Поле в объекте подобно полю в записи языка Delphi, но в отличие от записи, к полям в объекте обычно не разрешен прямой доступ. Это способствует защите полей от случайного или предумышленного искажения. Доступ к полям происходит через свойства, которые могут выступать как фильтры и не пропускать недопустимых значений. Объявления полей происходят как объявления обычных переменных, при этом поля чаще всего размещаются в закрытом интерфейсе класса, доступ к которому ограничен. В именах полей принято ставить первую букву F (от слова Field), например: FQuantity: Integer;.

Области видимости

Язык Delphi предоставляет дополнительный контроль уровня доступа к членам классов (полям и методам) с помощью директив protected, private, public, published и automated, открывающих соответствующие разделы объявлений, или, как принято говорить, — интерфейсы класса. За каждой из директив может следовать любое необходимое количество объявлений полей или методов. Каждый интерфейс обеспечивает следующий уровень доступа:

  •  Private (закрытый). Объявленные в данном разделе переменные и методы доступны только для того кода, который находится в блоке реализации самого объекта. Директива private скрывает особенности реализации объекта от пользователей и защищает члены этого объекта от непосредственного доступа и изменения извне.
  •  Protected (защищенный). Члены класса, объявленные в этом разделе, доступны объектам, производным от данного класса. Это позволяет скрыть внутреннее устройство объекта от пользователя и в то же время обеспечить необходимую гибкость, а также эффективность доступа к полям и методам объекта для его потомков.
  •  Public (открытый). Объявленные в этом разделе члены объекта доступны в любом месте программы. Конструкторы и деструкторы всегда должны быть объявлены как public.
  •  Published (экспортируемый). Для членов объекта, объявленных в данном разделе, в процессе компиляции будет создана информация о типах времени выполнения. Это позволит другим элементам приложения получать информацию об элементах объекта, объявленных как published. В частности, подобная информация используется инспектором объектов при построении списков свойств объектов.
  •  Automated (автоматизированный). Этот раздел сохранен только для обеспечения совместимости с ранними версиями Delphi.

Методы

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

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

1. Создайте новый проект типа Application.

2. Откройте инспектор объектов и щелкните на вкладке Events (События).

3. Два раза щелкните на поле обработчика OnСlick.

В редакторе кодов получите следующую программу (см. листинг ниже), где в классе Tform1 появится процедура FormClick, а в разделе реализации — описание этой процедуры.

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics,

 Controls, Forms, Dialogs;

type

 Tform1 = class(TForm)

   procedure FormClick(Sender: TObject);

 private

   { Private declarations }

 public

   { Public declarations }

  end;

var

 Form1: Tform1;

implementation

 {$R *.dfm}

procedure Tform1.FormClick(Sender: TObject);

begin

 { Здесь код обработки щелчка мыши. }

end;

end.

Таким образом вы создали пустую процедуру обработки щелчка мыши. Можете ее заполнить соответствующими кодами и получить нужный эффект. Например, можете изменить цвет фона окна на черный, для чего поместите в описание процедуры Tform1.FormClick (между ключевыми словами begin . . . end) следующую строку:

Form1.Color := clBlack;

и запустите программу (клавиша <F9>). После того как появится окно, щелкните на нем мышью и наблюдайте результат.

Свойства

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

Объекты

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

Перед тем как создать объект, следует объявить класс, на основе которого этот объект будет создан, В Delphi это делается с помощью ключевого слова class. Объявления классов помещаются в раздел объявления типов модуля или программы.

type

 TFooObject = class;

Только после объявления класса можно делать объявление переменных этого типа в разделе var.

var

 FooObject: TFooObject;

Полностью объект создается с помощью вызова одного из конструкторов соответствующего класса. Конструктор отвечает за создание объекта, а также за выделение памяти и необходимую инициализацию полей. Конструктор не только создает объект, но и приводит этот объект в состояние, необходимое для его дальнейшего использования. Каждый класс содержит по крайней мере один конструктор Create, который может иметь различное количество параметров разного типа — в зависимости от типа объекта.

Создание каждого объекта с помощью вызова его конструктора входит в обязанности программиста. Синтаксис вызова конструктора следующий.

FooObjееt := TFooObjееt.Create;

Обратите внимание на особенность вызова конструктора — он вызывается с помощью ссылки на класс, а не на экземпляр класса (в отличие от других методов, которые вызываются с помощью ссылки на объект). Иначе просто нельзя — ведь экземпляр объекта FooObject в момент вызова конструктора еще не создан. Но код конструктора класса TFooObject статичен и находится в памяти. Он относится к классу, а не к его экземпляру, поэтому такой вызов вполне корректен. Вызов конструктора для создания экземпляра класса часто называют созданием объекта.

При создании объекта с помощью конструктора компилятор гарантирует, что все поля объекта будут инициализированы. Все числовые поля будут обнулены, указатели примут значение nil, а строки будут пусты.

По окончании использования экземпляра объекта следует освободить выделенную для него память с помощью метода Free. Этот метод сначала проверяет, не равен ли экземпляр объекта значению nil, и затем вызывает деструктор объекта — метод Destroy. Действие деструктора обратно действию конструктора, т.е. он освобождает всю выделенную память и выполняет другие действия по освобождению захваченных конструктором объекта ресурсов. Синтаксис вызова метода Free прост.

FooObject.Free;

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

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

type

 TFoo = class;

полностью эквивалентно объявлению класса

type

 TFoo = class(TObject);

Интерфейсы

Интерфейс определяет набор функций и процедур, которые могут быть использованы для взаимодействия программы с объектом. Определение конкретного интерфейса известно не только разработчику, но и пользователю, оно воспринимается как соглашение о правилах объявления и использования этого интерфейса. В классе может быть реализовано несколько интерфейсов. В результате объект становится "многоликим", являя клиенту каждого интерфейса свое особое лицо.

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

2. БАЗОВЫЕ КЛАССЫ В DELPHI

Класс ТObject

В Delphi все объекты являются производными от базового (родительского) класса ТОbject, а следовательно, автоматически наследуют все его методы.

Класс Тоbject описывает основные принципы поведения объектов во время работы программы (создание, уничтожение, обработка событий и т.д.).

Определение класса расположено в модуле System.

Методы, которые классы наследуют от типа TObject, обычно используются напрямую. Но иногда при создании собственных типов некоторые методы TObject приходится переопределять.

Класс TControl

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

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

Класс TForm

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

События класса TForm приведены в табл. 2.2.

Таблица 2.1. Свойства класса TForm

Свойство

Назначение

Active

Определяет наличие фокуса

ActiveControl

Указывает элемент управления, имеющий фокус

Align

Изменяет размеры и положение формы

AiphaBlend, AlphaBlendValue

Определяют прозрачность формы.

Anchors

Используется для привязки углов элемента управления к углам включающего их компонента

AutoScroll

Если True, то полосы прокрутки появляются только при необходимости

AutoSize

Если True, то границы могут изменяться автоматически при изменении содержимого

BiDiMode

Определяет режим для направления считывания

BorderIcons

Определяет пиктограмму в заголовке окна

BorderStyle

Вид границ формы

BorderWidth

Ширина рамки

Caption

Название формы, помещаемое в заголовке

Canvas

Область рисований формы

ClientHeight, ClientWidth

Размеры клиентской части формы (без заголовка)

Color

Цвет фона формы

Constraints

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

Ctl3D

Вид формы — объемный (3D) или нет

Cursor

Определяет вид курсора при наведении указателя мыши на форму

Default Monitor

Определяет монитор, в котором отображается форма

DockSite

Содержит значение True, если к форме разрешено "пристыковываться" другим окнам

DropKind, DragMode

Определяют возможности формы при операциях перетаскивания элементов

Enabled

Опредепяет реакцию формы на события мыши, клавиатуры и таймеров

Font

Установка шрифтов для формы

FormStyle

Стиль формы

Heigth

Высота формы с заголовком и рамкой

HelpContex

Используется для организации справочника

HelpFile

Имя файла справки для формы

HelpKeyword

Ключевое слово для справочника

HelpType

Используется для организации справочника

Hint

Содержит текст подсказки, появляющейся при наведении на форму указатепя мыши

HorzScrollBar

Свойства горизонтапьной полосы прокрутки

Icon

Пиктограмма, обозначающая форму, когда она свернута

KeyPreview

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

Left

Координаты левого угла привязки

Menu

Ссылка на главное меню формы (TMenu)

ModalResult

Значение, возвращаемое формой, если она работает как модальное диалоговое окно

Monitor

Получение информации о мониторе, в котором отображается форма

Name

Идентификатор (имя) формы для обращения к ней в программе

ParentBiDiMode

Использование направления, установленного в базовом классе

ParentFont

Использование шрифтов, установленных в базовом шассе

PixelsPerlnch

Число пикселей на дюйм. Применяется для настройки размера формы в зависимости от экранного разрешения

Position

Положение формы на экране в момент ее открытия.

PrintScale

Масштабирование формы при выводе на печать

Scaled

Содержит значение True, если размер формы будет подгоняться в соответствии со значением свойства PixelsPerInch

ScreenSnap

Разрешение нз стыковку с границей экрана при приближении окна на расстояние, указанное в свойстве SnapBuffer

ShowHints

Разрешение на отображение подсказки

SnapBuffer

Установка зоны в пикселях для стыковки с границей экрана

Tag

Связывает числовое значение с формой

Top

Координаты угла привязки

TransparentColor

Разрешает прозрачность отдельного цвета

T ransparentColorVaiue

Определяет цвет, который будет прозрачным

UseDockManager

Разрешение режима стыковки при перетаскивании

Vert ScrollBar

Свойства вертикальной полосы прокрутки

Visible

Содержит значение True, если форма будет видима во время работы программы

Width

Ширина формы с рамкой

WindowState

Состояние формы (свернута, развернута, нормальный размер)

Модуль с формой содержит две вкладки: одна как графическое отображение, другая как текстовый редактор. Для переключения между вкладками шелкните на соответствующих корешках или используйте клавишу <F12>.

Таблица 2.2. События, поддерживаемые классом TForm

Событие

Условия генерации

OnActivate

При активизации формы

OnClose

При закрытии формы

OnCloseQuery

При запросе на закрытие формы

OnCreate

При создании формы

OnDeactivace

При потере фокуса ввода

OnDestroy

При уничтожении формы

OnDockDrop

При стыковке с другим окном

OnDropOver

При расстыковке с другим окном

OnGetSitelnfo

При стыковке окон

OnHelp

Форма получила запрос на выдачу справочной информации

OnHide

Форма стала невидимой (свойство Visible имеет значение False)

OnKeyDown

В момент нажатия клавиши клавиатуры при наличии фокуса

OnKeyPressed

В момент нажатия клавиши клавиатуры

OnKeyUp

При отпускании клавиши клавиатуры

OnPaint

При перерисовке формы

OnShortCut

Пользователь нажал клавиатурную комбинацию, которая пока не обработана

OnShow

Форма стала видимой (значение сеойстеа Visible стало True)

OnUpDock

При расстыковке элемента управления, подключенного средствами окна

3. СТАНДАРТНЫЕ, ДИАЛОГОВЫЕ И ДОПОЛНИТЕЛЬНЫЕ КОМПОНЕНТЫ

Компоненты — это классы, которые можно многократно использовать. Они включены в среду программирования Delphi и их пиктограммы отображаются в окне Tool Palette (Палитра компонент). В отличие от элементов управления, которые обязательно отображаются на экране во время работы или проектирования, для компонентов это не обязательно. Наиболее часто используемые компоненты расположены в разделах Standard, Additional, Win32, System и Dialogs. С их помощью можно создавать графические интерфейсы пользователя, почти не прибегая к ручному кодированию. Но для этого нужно не только знать свойства и методы компонента, но и хорошо понимать принципы построения графического интерфейса.

3.1. Стандартные компоненты

Компонент TLabel

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

1. Создайте новый проект Application.

2. Раскройте раздел Standard и щелкните на компоненте TLabel (рис. 3.1).

3. Щелкните на форме в том месте, где должна размещаться надпись. Особенно точными быть не старайтесь, компонент всегда можно перемещать по форме.

4. Если случайно поместили в форму не тот компонент, то выделите его, для чего щелкните мышью на нем и нажмите клавишу <Del>.

Теперь откройте инспектор объектов (клавиша <F11>) и ознакомьтесь со свойствами компонента. Раздел Layout начинается со свойства Align, для которого существует семь значений. Попробуйте все из них и увидите, как изменяется отображение надписи на форме. Также можете исследовать и остальные свойства. В разделе Miscellaneous есть несколько новых свойств, среди которых и свойство WordWrap (Разрыв строки). Чтобы понять, для чего нужно это свойство, выполните следующее.

1. Установите для свойства AutoSize значение False.

2. Установите для свойства WordWrap значение True.

3. Установите размеры надписи (свойства Height и Width) приблизительно 40*120 пикселей.

4. Введите для свойства Caption из раздела Action длинную строку, например ‘Это очень длинная-длииная строка’.

5. Наблюдайте, как произойдет переход на новую строку.

6. Измените значение свойства WordWrap. Посмотрите, что произойдет.

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

Рис. 3.1. Выбор компонента TLabel

Изменить содержимое надписи можно и из программы, для этого выполните следующие действия.

1. В инспекторе объектов выберите объект Form1, перейдите на вкладку Events и найдите событие OnCreate. Дважды щелкните на поле для этого события.

2. Delphi создаст заготовку процедуры для этого события с именем Tform1.FormCreate и разместит курсор в том месте, где необходимо вводить коды.

3. Наберите следующую строку:

Label1. Caption := ‘Надпись из программы';

4. Запустите программу (клавиша <F9>).

Когда будете набирать команду, обратите внимание, что как только вы введете точку после имени Label1, появится окно со списком всех доступных для этого объекта свойств и методов. Их будет значительно больше, чем в инспекторе объектов, так как в инспекторе объектов располагаются только те свойства, которые разработчик поместил в экспортируемый (published) интерфейс класса. Можете выбрать необходимое свойство из списка и дважды щелкнуть на нем (или нажать клавишу <Enter>), оно автоматически запишется в редактор кодов. Если знаете название свойства, то можете ввести первые буквы, и в окне будут отображаться только свойства, названия которых начинаются с этих букв, что значительно облегчает поиск.

Компонент TButton

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

1. Разместите в форме надпись и две кнопки.

2. Выберите для них необходимые размеры и шрифт.

3. Для кнопки Button1 выберите событие OnСlick и дважды щелкните на поле.

4. В заготовку процедуры Tform1.Button1Click введите следующую строку:

Label1.Caption := ‘Нажата кнопка';.

5. Проделайте то же для кнопки Button2, но вместо текста поставьте просто две кавычки:

Label1.Caption := ‘’;

6. Запустите программу.

Теперь можно управлять событиями, щелкая на кнопках и наблюдая производимый этими действиями эффект (рис. 3.2).

Рис. 3.2. Интерфейс программы с двумя кнопками и надписью

В Windows имеется возможность обращения к конкретному элементу управления с помощью быстрых клавиш. Соответствующий символ, который выделяется в названии элемента управления, будет отображаться с подчеркиванием. Чтобы выделить таким образом определенную букву, в системе Delphi перед ней надо поставить символ &. Например, для Button1 в свойство Caption введите такое название &Button1. Теперь можно не щелкать на кнопке, а нажимать клавишу <В>, получая тот же эффект. Только будьте внимательны, и устанавливайте соответствующий регистр клавиатуры.

Компонент TEdit

У компонента TEdit (Текстовое поле) свойства Caption (Заголовок) нет. Вместо него используется свойство Text (Текст). Это свойство содержит введенные пользователем данные в текстовом виде (тип string). Первоначально это свойство содержит строку, совпадающую с именем элемента управления (Edit1, Edit2 и т.д.). Текущее содержимое свойства Text (Текст) каждого текстового поля формы лучше удалить и ввести вместо этого пустую строку.

Свойства, начинающиеся со слова Bevel..., которое можно перевести как "фаска", определяют вид поля формы. Поле можно сделать выпуклым или вдавленным как с внутренней стороны, так и с внешней. Изменять содержимое поля можно с помощью свойства Text как в инспекторе объектов, так и из программы. В программе необходимо свойству Text просто присвоить значение. Например, создайте приложение типа Application, разместите на форме компонент TEdit, для формы выберите событие OnCreate (вкладка Events в инспекторе объектов) и дважды щелкните на поле для этого события. После создания заготовки обработчика события введите следующую команду:

Edit1.Text := ‘Текст из программы';

и запустите программу. Проконтролируйте появление этой фразы в появившемся интерфейсе после запуска программы (рис. 3.3).

Рис. 3.3. Сохранение введенного текста

При вводе текста в текстовое поле обратите внимание, что можно выделять, копировать и сохранять в буфере обмена фрагменты вводимого текста стандартным образом, т.е. можно щелкнуть правой кнопкой мыши на текстовом поле и получить контекстное меню с необходимыми командами, или использовать комбинации клавиш <Ctrl+X>, <Ctrl+C> и <Ctrl+V>.

Свойства Caption и Text имеют тип string, поэтому если в них записывать числа, они будут храниться в текстовом виде.

Компонент TMemo

Обойтись надписями и текстовыми полями для вывода информации можно только в простейших случаях. Но если необходимо ввести или вывести большой объем информации (например, полный почтовый адрес или произвольный комментарий), то понадобится по крайней мере несколько строк текста. В таком случае следует использовать компонент TMemo (Текстовая область), который расположен в разделе Standard.

Среди уже знакомых свойств есть и специфические свойства, такие как WantReturns. Оно необходимо для установки режима использования клавиши <Enter>. Обычно при вводе текста для перехода на новую строку (к новому абзацу) используется клавиша <Enter>. Однако в диалоговых окнах Windows эта клавиша часто применяется для завершения ввода. Способ использования клавиши <Enter> определяется значением свойства WantReturns. Если оно имеет значение True, то клавиша <Enter> позволяет переходить к новой строке внутри текстовой области, в противном случае она служит для завершения ввода и перехода к следующему элементу управления, а для перехода к новой строке применяется комбинация клавиш <Ctrl+Enter>.

Аналогично, свойство WantTabs разрешает или запрещает использовать клавишу <Таb> при вводе текста.

Главное свойство данного компонента Lines (Строки). Оно имеет тип TStrings, в котором хранится список строк, введенных пользователем. Эти строки можно обрабатывать всеми методами, доступными в классе TStrings, например, сохранять в файле:

Memo1.Lines.SaveToFile('С:\Memo.TXT');

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

Таблица 3.1. Значения свойства ScrollBars

Значение

Вид текстовой области

ssNone

Полосы прокрутки отсутствуют

ssHorizontal

Имеется горизонтальная полоса прокрутки

ssVertical

Имеется вертикальная полоса прокрутки

ssBoth

Имеются две полосы прокрутки

Если включена горизонтальная полоса прокрутки, значение свойства WordWrap игнорируется. Это свойство определяет, будет ли выполняться автоматический перенос слов на новую строку при достижении правой границы области (при этом никакие символы повой строки в текст не добавляются — перенос отображается только на экране).

При выделении фрагмента текста в текстовой области в свойство SelStart записывается позиция первого выделенного символа, а в свойство SelLength — число выделяемых символов. Выделенный текст доступен через свойство SelText (тип string). Для выделения всего текста применяется метод SelectAll, для удаления выделенного текста — метод ClearSelection.

Чтобы очистить содержимое текстовой области, используется метод Сlear, чтобы отменить последние изменения — метод Undo, а чтобы очистить буфер, хранящий историю изменений, и сделать такую отмену невозможной, используется метод ClearUndo.

Группа методов предназначена для работы с буфером обмена Windows. Для копирования выделенного текста в буфер обмена применяется метод CopyToClipboard, для вырезания выделенного текста — метод CutToClipboard, для вставки текста из буфера — метод PasteFromClipboard. Для этих целей можно также использовать стандартные комбинации клавиш:

<Clri+X> — вырезать вьшеленный текст в буфер;

<Ctrl+C> — скопировать выделенный текст в буфер;

<Ctrl+V> — вставить текст из буфера.

Когда в текстовой области происходит изменение текста, генерируется событие OnChange.

Так же как и надпись, текстовую область можно использовать для отображения информации из программы. Чтобы это проверить, создайте приложение с двумя компонентами: ТМеmo и TButton. Для обработчика события нажатия кнопки введите следующий текст:

Memo1.Lines.Add('Новая строка');.

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

3.2. Диалоговые компоненты

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

Вызов этих компонентов происходит из программы.

Рис. 3.4. Пиктограммы диалоговых компонентов

Компонент TOpenDialog

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

Большое число значений для свойства Option позволяет настроить режимы выбора, предоставляя возможность, например, выбирать только одиночные файлы или группы файлов. В табл. 3.2 перечислены все доступные варианты выбора.

Таблица 3.2. Варианты выбора для свойства Option

Значение

Описание

OfReadOnly

При открытии диалогового окна по умолчанию устанавливается режим "Только для чтения"

OfOverwritePromt

Генерирует предупреждающее сообщение, если происходит выбор файла, который уже используется

OfHideReadOn1у

Удаляет флаг для установки режима "только для чтения"

OfNoChangeDir

После щелчка на кнопке ОК переустанавливает текущий каталог на тот, который был до открытия диалогового окна

OfShowHelp

Отображает кнопку Help

OfNoValidate

Отменяет проверку символов в имени файла. Разрешает ввод имени с недопустимыми символами

OfAllowMultiSelect

Разрешает выбор нескольких файлов

OfExtensionDifferent

Этот флаг устанавливается, когда расширение выбранного файла отличается от установленного ло умолчанию. Если этот флаг используется, не забывайте его переустанавливать

OfPathMustExist

Генерирует сообщение об ошибке, если происходит выбор файла из несуществующего каталога

OfFileMustExist

Генерирует сообщение об ошибке, если происходит выбор несуществующего файла (только для диалогового окна Оpen)

OfCreatePrompt

Генерирует сообщение об ошибке, если происходит выбор несуществующего файла с запросом на создание нового файла

OfShareAware

Игнорирует запрет на совместное испопьзование и разрешение выбора файла

OfNoReadOn1yReturn

Генерирует сообщение об ошибке, если пользователь выбирает файл в режиме "только для чтения"

ОfNoTestFileCreate

Запрещает проверку сетевой защиты файла и доступность дисков. Используется только при сохранении файлов в совместный сетевой каталог

ОfNoNetworkButton

Убирает кнопку Network (открытие сетевых дисководов) из диалогового окна выбора файлов. Используется только при установленном флаге ОfOldStyleDialog

ОfNoLongNames

Отображает только 8.3-симеольные имена файлов. Используется при установленном флаге ОfOldStyleDialog

ОfOldStyleDialog

Создает старый стиль диалога выбора файлов

ОfNoDeferenceLinks

Запрещает разыменование сокращений Windows

ОfEnableIncludeNotifу

(Windows 2000 и более старшие.) Посылает уведомление СDN_INCLUDEITEM при открытии каталога. Уведомление посылается для каждого элемента каталога. Можно использовать для контроля элементов каталога

ОfEnableSizing

(Windows 98 и более старшие.) Разрешает изменять размеры с помощью мыши или клавиатуры. По умолчанию изменение размеров разрешено независимо от установок этой опции. Она требуется только при использовании процедуры перехвата

ОfDontAddToRecent

Запрещает добавлять файл в список недавно открытых файлов

ОfForceShowHidden

Гарантирует видимость скрытых файлов

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

Компонент TSaveDialog

Компонент TSaveDialog (Сохранить файл) полностью идентичен компоненту TOpenDialog и отличается только надписями для отдельных элементов.

Компонент TCheckBox

Компонент TCheckBox (Флажок) предоставляет два варианта выбора — его можно установить или сбросить. Установленный флажок отмечен крестиком, у сброшенного флажка квадратик пустой. Пользователь может переключить флажок с помощью мыши или клавиши пробела. Для переключения с помощью клавиши пробела флажок должен иметь фокус ввода.

После размещения компонента флажок в форме, заголовок к этому элементу управления можно задать в свойстве Caption. Расположение заголовка определяется свойством Alignment: значение taRightJustify означает расположение подписи справа, а значение taLeftJustify — слева.

Главное свойство флажка называется Checked. Оно доступно для изменения и на этапе проектирования, и на этапе работы программы. Это свойство принимает значение True, если флажок включен, и False, если он сброшен.

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

Если для свойства AllowGrayed задано значение True, то флажок при последовательных щелчках на нем будет поочередно принимать состояния "сброшен", "установлен частично" и "установлен". Определить текущее состояние или задать новое из числа доступных можно, проверив или изменив свойство State, значения которого приведены в табл. 3.3. Чтобы реагировать на изменение состояния флажка, надо создать обработчик события OnСlick (При щелчке).

Таблица 3.3. Значения свойства State

Значение

Состояние флажка

cbUnchecked

Сброшен

cbGrayed

Установлен частично

cbСhecked

Установлен

Рассмотрим небольшую программу, отражающую изменения состояния флажка и вывода текущего состояния в надпись Label1. Для этого необходимо разместить в форме надпись и флажок, установить значение свойства AllowGrayed равным True, сформировать обработчик события OnСlick для флажка (вкладка Events в инспекторе объектов) и записать в нем оператор выбора текущего состояния флажка.

procedure TMyForm.CheckBoxlClick(Sender: TObject);

begin

 case CheckBox1.State of

   сbUnchecked: Label1.Caption := 'выключено';

   cbGrayed   : Label1.Caption := 'затемнено';

   cbChecked  : Labell.Caption := 'включено';

 end;

end;

Результат работы программы показан на рис. 3.5.

Рис. 3.5. Просмотр состояний флажка

Компонент TRadioButton

В отличие от флажка, компонент TRadioButton (Переключатель) предназначен для выбора одного переключателя из ряда возможных. Переключатели всегда используются группами. Когда пользователь выбирает один из них, то выделение с текущего переключателя снимается. Таким образом, в группе выделен всегда только один переключатель.

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

Свойства переключателя аналогичны свойствам флажка. Свойство Alignment определяет положение подписи справа или слева от переключателя, а свойство Checked — состояние объекта.

Методы GetChecked и SetChecked, позволяющие обращаться к свойству Checked и изменять его значение, в тексте программы явно не используются. Они предназначены для использования в производных от класса TRadioButton классах.

Для отслеживания состояния конкретного переключателя необходимо обработать событие ОnСlick.

В форме достаточно разместить несколько переключателей, но после компиляции и запуска программы будет выделен всегда только один из них. Во время проектирования один из переключателей желательно включить, а все остальные по умолчанию оставить выключенными. Если требуется отслеживать состояние переключателей динамически, создайте обработчик события OnСlick для каждого из них. Статус переключателя можно отобразить с помощью надписи Label1, как в примере для флажков.

procedure TMyForm.RadioButton1Click(Sender: TObject);

begin

 if RadioButtonl.Checked then

   Label1.Caption := 'Выбран переключатель 1'

end;

procedure TMyForm.RadioButton2Cliсk(Sender; TObject);

begin

 if RadioButton2.Checked then

 Label1.Caption := 'Выбран переключатель 2'

end;

Компонент TRadioGroup

Если в программе требуется использовать несколько групп переключателей (например, одну для указания предприятия, а другую для выбора), можно применить один из двух подходов. Первый состоит в выделении для каждой группы специального контейнерного объекта (панели), чтобы система Delphi могла понять, как объединяются переключатели. Второй подход состоит в использовании компонента TRadioGroup (Группа переключателей), который объединяет свойства и методы, обеспечивающие поддержку работы группы переключателей.

После размещения в форме компонента TRadioGroup входящие в него переключатели задаются перечислением их названий. Эти названия вводятся в свойство Items, имеющее тип TString. Так как требуется ввести не одну строку, а несколько, для их ввода предусмотрен специальный редактор (рис. 3.6), который вызывается щелчком на кнопке с многоточием (...), расположенной в поле для свойства Items. Текстовая область окна редактора предназначена для ввода названий переключателей, по одному в каждой строке. Не забывайте о возможности управления программой с помощью клавиатуры, поэтому перед некоторыми буквами в названиях можно указать символ "&", чтобы сделать эти буквы подчеркнутыми. Затем щелкните на кнопке ОК, и внешний вид объекта RadioGroup1 примет вид, подобный изображенному на рис. 3.7.

Рис. 3.6. Редактор строк

Рис. 3.7. Компонент TRadioGroup

Поскольку компонент TRadioGroup представляет единое целое со своими переключателями, то и установки его свойств отличаются от компонента TRadioButton. Так, свойство Caption определяет не надпись каждого переключателя, а заголовок группы (исходно она называется RadioGroup1). Надписи теперь задаются в свойстве Items (Список строк).

Свойство Columns задает число столбцов (первоначально один), создаваемых переключателями.

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

Динамически реагировать на выбор нового переключателя в группе можно с помощью обработчика события OnClick. Например, чтобы отображать с помощью надписи Label1 название текущего переключателя, надо обратиться к свойству Items и выделить тот элемент, номер которого записан в свойстве ItemIndex. Предварительно следует проверить, есть ли выделенный переключатель (значение свойства ItemIndex не должно быть равно -1), или выбрать один из переключателей на этапе проектирования (например, присвоив свойству ItemIndex значение 0),

procedure TMyForm.RadioGroup1Click(Sender: TObject);

begin

 if RadioGroup1.ItemIndex > -1 then

   Label1.Caption := 'Выбран' +

     RadioGroup1.Items[RadioGroup1.ItemIndex];

end;

Компонент TListBox

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

Свойство Items имеет тип TStrings и содержит список строк, выводимых на экран. Во время разработки программист может редактировать свойство Items с помощью редактора списка строк. Во время выполнения элементы списка можно добавлять с помощью метода Add класса TStrings, а удалять — с помощью метода Delete этого же класса. Свойство ItemIndex содержит порядковый номер выделенного элемента, для первого элемента значение ItemIndex равно 0. Если ни один элемент не выделен, то значение ItemIndex равно -1. Свойство MultiSelect позволяет выделить несколько элементов (строки) списка.

Свойство SelCount содержит количество выделенных элементов, а свойство Selected определяет, выделен ли конкретный элемент. Свойство Sorted определяет, будут ли элементы выведены в алфавитном порядке. Свойство Style задает внешний вид элементов. По умолчанию элементы выводятся в виде строк, однако, изменив свойство Style, их можно вывести в графическом виде или с разной высотой.

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

Число столбцов задается с помощью свойства Columns. Если оно больше 0, то на каждую колонку отводится часть обшей ширины списка (значение свойства Width, деленное на число столбцов). Список может принадлежать одному из пяти возможных типов для свойства Style, перечисленных в табл. 3.4.

Таблица 3.4. Значения для свойства Style

Значение

Стиль списка

lbStandard

Стандартный список (стиль по умолчанию)

lbOwnerDrawFixed

Каждый элемент списка имеет фиксированную высоту, но способ его отображения определяется программистом

lbOwnerDrawVariable

Кроме способа рисования, в тексте программы необходимо явно задавать размер каждого элемента списка (что позволяет создавать списки с элементами разных размеров)

lbVirtual

Список является виртуальным, но все элементы — это строки одинаковой высоты. Число элементов списка сохраняется в свойстве Count. Необходимо установить элементы списка с помощью обработчика событий OnData. Если элементы связаны с объектами, то необходимо использовать обработчик событий OnDataОbject. И наконец, нужно установить соответствие между строками и индексами для обработчика событий OnDataFind

lbVirtualOwneгDгaw

Список является виртуальным, но все элементы — это строки одинаковой высоты. Как и для lbOwnerDrawFixed, высота символов определяется свойством ItemHeight, а свойства символов можно установить с помощью обработчика события OnDrawItem. Как и для lbVirtual, количество элементов сохраняется в свойстве Count. Также необходимо установить элементы списка с помощью обработчика событий OnData. Если элементы связаны с объектами, следует использовать обработчик событий OnDataObject. И наконец, необходимо установить соответствие между строками и индексами для обработчиков событий OnData и ОnDataFind

Если значение свойства Style не равно lbStandard, программист должен сформировать для списка обработчик события OnDrawItem и самостоятельно организовать прорисовку содержимого. Такой список может содержать не только текст, но и другие объекты, например рисунки.

Узнать высоту элемента в пикселях можно, обратившись к свойству ItemHeight.

Если высота элементов списка различна, то перед обработкой события OnDrawItem надо обработать событие OnMeasureItem. В заголовке соответствующего обработчика имеется параметр, описанный так:

var Height: Integer;

В этот параметр, передаваемый по ссылке, надо записать размер очередного элемента (его номер указывается и параметре Index), а затем уже обработать событие OnDrawItem с учетом текущей высоты элемента.

Выбирать элементы в списке можно по одному, а можно и несколько одновременно. Свойство MultiSelect (тип Boolean) позволяет выбирать несколько элементов, если его значение равно True. Выделить группу элементов можно, если при переходе к очередному элементу удерживать нажатой клавишу <Shift>. Такая возможность появляется, если в свойстве ExtendedSelect установлено значение True.

Свойство SelCount (оно доступно только для чтения и не может быть изменено в тексте программы) содержит число выделенных строк списка. Чтобы определить, выделен ли конкретный элемент, надо, используя его номер, обратиться к свойству Selected, представляющему собой массив типа Boolean. Значение выражения ListBox.Selected[4] будет True, если пятый элемент (отсчет ведется с нуля) в списке выделен.

Если выделение нескольких элементов не разрешено, то узнать, какой элемент выделен, можно, обратившись к свойству ItemIndex, хранящему номер единственного выделенного элемента.

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

Например, если необходимо занести в список значения, отображаемые на надписи Label1, то в форму можно добавить дополнительную кнопку, а в обработчике щелчка на этой кнопке (событие OnClick) вызвать метод Add.

procedure TMyForm.Button2Click(Sender: TObject);

begin

 ListBox1.Items.Add(Label1.Caption);

end;

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

Для очистки всего содержимого списка используется метод Clear:

ListBox1.Clear;

Для удаления конкретного элемента служит метод DeleteString. Например:

ListBox1.DeleteString(4);

Еще один полезный метод, который часто используется для вызова контекстного меню конкретного элемента списка, называется ItemAtPos. Он переводит координату точки внутри списка в номер элемента, в рамках которого лежит эта точка. Его удобнее всего использовать в обработчике щелчка мыши для объекта типа TListBox. В следующей программе разместите в форме три компонента: кнопку, список и строку состояния (компонент TStatusBar в разделе Win32). Для строки состояния свойство SimplePanel установите в состояние True, и для соответствующих обработчиков кнопки и списка событий наберите коды из приведенного ниже листинга.

procedure Tform1.Button1Click(Sender: TObject);

var

 I: Integer;

begin

 for I: = 0 to Form1.ComponentCount-1 do

   ListBox1.Items.InsertObjeot(0,Form1.Components[I].Name,

                          Form1.Components[I] as TObject);

end;

procedure Tform1.ListBox1MouseUp(Sender: TObject;

 Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

var

 APoint: TPoint;

 Index: Integer;

 TheObject: TControl;

begin

 if Button=mbRight then

 begin

   APoint.X := X;

   APoint.Y := Y;

   Index := ListBox1.ItemAtPos(APoint, True);

   if (ListBox1.Items.Objects[Index] is TControl) then

   begin

     TheObject:= (ListBox1.Items.Objects[Index] as TControl);

     StatusBar1.SimpleText := TheObject.Name +

       'координаты (' + IntToStr(TheObject.Left) + ' +

                        IntToStr(TheObject.Top) + ')

   end else

     Beep;

 end;

end;

Соответствующее данному листингу окно показано на рис. 3.8.

Рис. 3.8. Отображение состояния элементов списка

Нажав кнопку и затем щелкая правой кнопкой мыши на отдельных элементах, вы увидите имя элемента и его координаты в строке состояния. У функции ItemAtPos два параметра. Первый — объект типа TPoint, содержащий координаты точки. Второй параметр определяет, какое значение будет возвращено, если щелчок выполнен вне границ реально присутствующих в списке строк (это может быть только в области за последней строкой).

Компонент TCheckListBox

Компонент TCheckListBox (Список с флажками) расположен в разделе Additional и представляет собой прокручиваемый список, рядом с каждым элементом которого расположен флажок. Пользователь может по своему выбору установить или снять любой из флажков.

Свойство Items содержит элементы списка. Свойство ItemIndex содержит порядковый номер текущего выделенного элемента списка. Если ни один элемент не выделен, то значение ItemIndex равно -1. Свойство SelCount равно количеству выделенных элементов.

Свойство Selected определяет, выделен ли каждый конкретный элемент, а свойство Checked — установлен ли флажок конкретного элемента. Свойство Sorted задает расположение элементов в алфавитном порядке, а свойство Style — внешний вид выводимых элементов. Все эти свойства аналогичны соответствующим свойствам описанных выше компонентов.

Компонент TComboBox

Компонент TComboBox (Поле со списком) представляет собой вариант списка с присоединенным дополнительным полем, в котором отображается выбранный элемент списка. Это же поле может использоваться для ввода новых элементов или для ввода новых элементов или для быстрого поиска элемента по начальным символам.

Компонент Поле со списком может работать в пяти разных режимах (см. табл. 3.5), определяемых значением свойства Style.

Таблица 3.5. Значения свойства Style для поля со списком

Значение

Описание

csDropDown

Создается ниспадающий список и попе редактирования для ручного ввода текста. Все символы строк одинакового размера. Свойство MaxLength определяет максимально допустимое число символов, которое можно ввести в поле редактирования (значение 0 указывает на отсутствие ограничений). Текст, введенный пользователем, доступен через свойство Text

csSimple

Создается поле редактирования с фиксированным списком, который не является раскрывающимся. Размер списка определяется через свойство Height

сsDropDownList

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

сsOwnerDrawFixed

Создается ниспадающий список без возможности редактирования. Высота всех элементов списка определяется свойством ItemHetght

csOwnerDrawVariable

Создается ниспадающий список без возможности редактирования. Элементы списка могут иметь различные размеры

Как и в случае обычного списка, вместо режима работы csDropDown можно использовать аналогичные режимы csOwnerDrawFixed и csOwnerDrawVariable, которые отличаются только необходимостью программной прорисовки содержимого каждого элемента (компонент TListBox).

Вводимый текст может автоматически преобразовываться к верхнему регистру (если свойство CharCase имеет значение ecUpperCase), к нижнему (ecLowerCase) или никак не преобразовываться (ecNormal — по умолчанию).

Максимальное число элементов, одновременно отображаемых в видимой части списка, задается в свойстве DropDownCount. Чтобы открыть список из программы, свойству DroppedDown (Раскрытие) надо присвоить значение True.

Понятия "выделенная строка" в раскрывающемся списке нет. В нем имеется только текущая выбранная строка (ее номер в списке хранится в свойстве ItemIndex). Соответственно, нельзя и выделять строки списка. Единственный метод, связанный с выделением данных, — это процедура SelectAll, которая переносит текст, введенный пользователем, в присоединенное поле. При работе раскрывающегося списка наиболее важными являются представленные ниже события:

OnСhange — происходит при изменении пользователем текста в присоединенном поле;

onDropDown — происходит при раскрытии списка. Это событие необходимо обрабатывать, если содержимое списка может меняться во время работы программы. Тогда в обработчике этого события можно заново сформировать содержимое списка (свойство Items).

3.3. Дополнительные компоненты

Компонент TGroupBox

Компонент TGroupBox (Объединение элементов) группирует логически связанные элементы управления. Если какой-либо компонент расположен в объединении элементов, то по отношению к объединению класс этого компонента является дочерним.

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

Компонент TMainMenu

С помощью компонента TMainMenu (Главное меню) программист создает в среде Delphi главное меню формы. Элемент управления состоит из строки меню и ассоциированных с его пунктами раскрывающихся меню. Раскрывающиеся меню могут содержать дополнительные пункты TMenuItem.

Для создания главного меню во время разработки добавьте компонент TMainMenu в форму и дважды щелкните на нем. При этом открывается редактор главного меню. Затем добавьте пункты меню и установите их свойства в окне инспектора объектов.

Компонент TPopupMenu

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

Как и главное меню, контекстное меню добавляется в форму во время разработки. Создайте новый проект и добавьте в форму контекстное меню. Дважды щелкните на пиктограмме контекстного меню и в появившемся редакторе меню введите необходимые пункты (рис. 3.9). Установите их свойства с помощью инспектора объектов. Там нет необычных свойств и, например, свойство Caption, как и во многих других компонентах, определяет название пункта, а свойство Radioltem позволяет выбирать сразу несколько пунктов меню. Свойство Break определяет начало новой колонки.

Рис. 3.9. Проектирование компонента типа TPapupMenu

Как обычно, выбор события OnСlick для соответствующего пункта и двойной щелчок на нем создаст заготовку обработчика события OnСlick в редакторе кодов и установит курсор в то место, где необходимо набирать код обработчика.

Компонент TImage

Компонент TImage (Изображение), предназначенный для вывода в форму графического рисунка, расположен в разделе с дополнительными компонентами Additional. Он поддерживает многочисленные форматы графических файлов, включая .bmp, .ico, .emf, .jpg и др.

Программист может присвоить какой-либо рисунок компоненту TImage как при разработке в среде Delphi, так и во время выполнения. Для этого нужно присвоить свойству Picture объект типа TPicture, содержащий рисунок. Во время проектирования в свойстве Picture можно открыть редактор изображений и с его помощью указать файл, содержащий рисунок. Для присвоения изображению файла с рисунком во время выполнения используется метод LoadFromFile, принадлежащий объекту типа TPicture, который, в свою очередь, должен принадлежать изображению. Например, для вывода в изображении MyPicture файла рисунка myPicture.jpg во время выполнения используется следующий вызов:

MyPicture.Picture.LoadFromFile('myPicture.jpg');

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

Если значение свойства AutoSize равно True, то размеры элемента управления TImage автоматически изменяются, подстраиваясь под заданные границы. Если оно равно False, то размеры элемента управления остаются неизменными независимо ог размеров рисунка, при этом в изображении может оказаться видимой только часть рисунка.

Чтобы подстроить размеры рисунка под заданные границы, используется свойство Stretch. Если оно равно True, то размеры рисунка подстраиваются под размеры элемента управления TImage. Если при этом во время выполнения изменяются размеры изображения, то автоматически изменяются также размеры рисунка. Естественно, это искажает соотношение высоты и ширины рисунка, поэтому необходимо установить значение True для свойства Proportional, заполнение выделенного пространства может быть неполным, но при этом сохранены пропорциональные соотношения. Свойство Stretch не влияет на файлы рисунков с расширением .ico.

Компонент TShape

С помощью компонента TShape (Фигура), который также расположен в разделе дополнительных компонентов, программист может во время разработки нарисовать в форме простую геометрическую фигуру (свойство Shape), предназначенную для украшения формы или для выделения каких-либо деталей. В соответствии со значением свойства Shape можно вывести на экран круг, эллипс, прямоугольник (с прямыми или скругленными вершинами) либо квадрат. Свойства Brush и Реn задают вид заполнения и границы соответственно.

Компонент TScrollBox

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

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

Рис. 3.10. Прокручиваемая область с кнопками

Компонент ТTimer

С помощью компонента TTimer (Таймер), который находится в разделе системных компонент System, можно запрограммировать выполнение определенного кода через заданные интервалы времени. Когда таймер установлен в форме, система периодически генерирует события OnTimer. Для пользователя таймер невидим, однако программист может разместить в форме какой-либо компонент, извещающий о наличии или состоянии таймера и позволяющий управлять его работой.

Свойство Interval содержит интервал времени между генерацией событий OnTimer, выраженный в миллисекундах (мс). Например, если свойство Interval таймера имеет значение 1000, то система будет генерировать событие OnTimer каждые 1000 мс (одна секунда). Отсчет времени начинается с момента установки свойства Enabled в True. Чтобы отключить таймер, нужно присвоить свойству Enabled значение False, или свойству Interval — значение 0.

Компонент TPaintBox

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

Объект Canvas (Холст) является как бы поверхностью, на которой выполняется рисование. Рисунок на этот холст наносится кодом обработчика события OnPaint.

Резюме

В этой главе рассмотрены далеко не все компоненты Delphi, а только те, которые могут понадобиться при разработке несложных программ. В Delphi 8 существует много компонентов для работы с базами данных, построения распределенных систем, работы в Internet, создания многопоточных приложений или разработки библиотек DLL. В этой книге представлены только те компоненты, которые необходимы для разработки индивидуальных прикладных программ, об этом будет сказано в следующей главе.

ВЫВОДЫ

  1.  Класс — это шаблон, на основе которого создаются экземпляры класса, или объекты. Программа, написанная с использованием ООП, состоит из объектов, которые могут взаимодействовать между собой.
  2.  Методы представляют собой процедуры и функции, принадлежащие классу. Методы определяют поведение класса. В классе всегда должны присутствовать два важнейших метода: конструктор и деструктор. При проектировании класса можно создать произвольное количество любых других методов, необходимых для решения конкретных задач.
  3.  Объекты (экземпляры класса) представляют собой сущности, которые могут содержать данные и код. Объекты Delphi предоставляют программисту все основные возможности объектно-ориентированного программирования, такие как наследование, инкапсуляция и полиморфизм.
  4.  Интерфейс определяет набор функций и процедур, которые могут быть использованы для взаимодействия программы с объектом. Определение конкретного интерфейса известно не только разработчику, но и пользователю, оно воспринимается как соглашение о правилах объявления и использования этого интерфейса. В классе может быть реализовано несколько интерфейсов. В результате объект становится "многоликим", являя клиенту каждого интерфейса свое особое лицо.
  5.  Компоненты — это классы, которые можно многократно использовать. Они включены в среду программирования Delphi и их пиктограммы отображаются в окне Tool Palette (Палитра компонент).
  6.  Компонент TLabel (Надпись) служит для получения коротких надписей в форме. Компонент TButton (Кнопка) расположен в разделе Standard и позволяет устанавливать в окнах кнопки. Компонент TEdit (Текстовое поле) часто используется для ввода значений.
  7.  Диалоговые компоненты размещаются в разделе Dialogs и предназначены для создания графического интерфейса, позволяющего удобно вводить различную информацию. Однако сами диалоговые компоненты не имеют графического отображения при размещении в форме.
  8.  Дополнительные компоненты позволяют располагать в формах различные элементы – графику, поля для рисования, таймеры и др.

Контрольные вопросы

  1.  Дайте определение понятиям "класс" и "объект".
    1.  Что такое поле? Как поле связано со свойством?
    2.  Что такое метод?
    3.  Что такое интерфейс? Как вы понимаете его основное назначение?
    4.  Если при описании класса явно не указывать базовый класс, то какой класс будет использоваться в качестве базового?
    5.  От какого класса унаследован класс TForm?
    6.  Какой класс является базовым для элементов управления?
    7.  Почему возникает необходимость в использовании полос прокрутки?
    8.  Чем контекстное меню отличается от главного меню?
    9.  В каких компонентах используется тип TStrings? В чем заключаются преимущества использования TStrings?
    10.  Для каждой из следующих задач укажите наиболее подходящий элемент управления:

а) вывести надпись на форме;

б) ввести строку данных;

в) отобразить картинку;

г) вводить и сохранять большое количество данных с целью последующего их отображения на экране;

д) производить поиск файлов.


 

А также другие работы, которые могут Вас заинтересовать

58051. Построение сечений многогранников 24.86 MB
  Образовательные: ввести понятие сечения многогранника; рассмотреть способы решения задач на построение сечений многогранников на основе аксиоматики. Развивающие: развивать пространственное воображение обучающихся; формировать умения чётко и ясно излагать свои мысли; совершенствовать графическую культуру.
58052. У світі синусоїдів. Урок дослідження. (Методом проектів) 724 KB
  Доведено що будьяке періодичне коливання можна зобразити як суму синусоїдальних коливань. Частоти цих синусоїдальних коливань називають спектром складного коливання. Розкладання складного коливання на суму синусоїдальних коливань називають спектральним аналізом коливання. Спектральним аналізом коливань користуються для розрахунку різних конструкцій.
58053. Урок навчання грамоти. Читання 80 KB
  МЕТА: повторити вивчені букви, формувати навички читання слів і речень з вивченими буквами; вдосконалювати навички побудови звуко-складових моделей; розвивати мовлення учнів, мислення; виховувати інтерес до уроку читання.
58054. Види трикутників. Рівнобедрений трикутник 88 KB
  Навчальна мета: ознайомити з видами трикутників, їх властивостями, ознайомити з історією розвитку поняття «трикутника» та розглянути використання властивостей трикутників в житті; закріплювати основні поняття теми «Трикутники»...
58055. Сучасний урок – це дзеркало загальної і педагогічної культури вчителя 251 KB
  Чітке формулювання освітніх завдань у цілому та його складових, їх звязок із розвивальними та виховними завданнями; Визначення місця в загальній системі уроків; Визначення оптимального змісту уроку відповідно до вимог навчальної програми та мети уроку...
58056. Урок – гра. «Математика і навколишній світ». Дії з натуральними числами 70.5 KB
  Мета: Систематизувати знання, уміння та навички учнів по темі «Дії з натуральними числами» В процесі розв’язання цікавих нестандартних; Сприяти розвитку та формуванню інтелектуальних і творчих здібностей учнів...
58057. Уроку позакласного читання для учнів 3-х класів 144 KB
  Мета: Поглибити знання дітей про породи собак; пробуджувати інтерес до прочитаного; розвивати навички правильного, свідомого читання, уміння самостійно працювати з текстом, порівнювати, узагальнювати, робити висновки...
58058. Прикладна діяльність. Створення декоративної композиції «Дерево життя» в техніці петриківського розпису 63 KB
  Мета: ознайомити учнів із світосприйняттям предків на прикладі дерева життя символу українського декоративно-прикладного мистецтва; вчити учнів передавати на малюнку чарівний світ природи за допомогою основних прийомів петриківського розпису...
58059. Шопен – душа фортепіано 74 KB
  Мета уроку: Навчальна: ознайомити учнів із творчістю та життєвим шляхом Ф.Шопена, провідними стильовими засадами його композиторського почерку; працювати над диханням, чистотою інтонування, співом у єдиній вокальній позиції.