Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Технологии программирования. Программирование графических интерфейс

.pdf
Скачиваний:
3
Добавлен:
15.11.2022
Размер:
2.24 Mб
Скачать

Рис. 10.1

6.В раздел interface модуля вставить описание массива

ииспользуемых переменных

a:array[1..10] of integer;

i,min,max,imin,imax:integer;

7. Выполнить двойной щелчок по форме Form1, в результате чего будет создана заготовка события OnCreate для формы, возникающего в момент создания формы. Размещение операторов в этом обработчике во многих случаях эквивалентно размещению операторов в секции initialation модуля. Поместить там следующие строки:

i:=0;

ListBox1.Clear;

ListBox2.Clear;

8. Выполнить двойной щелчок по кнопке «Ввод», и в обработчике события OnClick поместим следующий код:

ListBox1.Items.Add(Edit1.Text);

i:=i+1;

a[i]:=StrToInt(Edit1.Text);

Edit1.SetFocus;

9. Выполнить двойной щелчок по кнопке «Решение» и в обработчик события OnClick поместим следующий код:

161

max:=a[1]; imax:=1; min:=a[1]; imin:=1; for i:=2 to 10 do

begin

if max<a[i] then

begin max:=a[i]; imax:=i end; if min>a[i] then

begin min:=a[i]; imin:=i end; end;

a[imax]:=min;

a[imin]:=max; for i:=2 to 10 do

ListBox2.Items.Add(IntToStr(a[i]));

10. Для удобства работы с приложением создать обработчик события OnKeyDown для строки ввода Edit1, в котором при нажатии на клавишу Enter фокус ввода будет переводиться на кнопку «Ввод»:

if key=13 then Button1.SetFocus

11. Запустить программу. Для ввода целых чисел использовать строку ввода Edit1. Ввод каждого числа завершить, нажав дважды клавишу Enter, либо нажав кнопку «Ввод». Введенные числа отображаются в первом списке (рис. 10.2).

Рис. 10.2

162

После нажатия на кнопку «Решение» получим результат во втором списке.

Вопросы для самоконтроля

1.Для чего используются компоненты TIistBox и TComboBox? В чем отличие этих компонентов?

2.Каким образом хранятся строки в списках?

3.Как хранится введенная через edit box строка в списке

TComboBox?

4.Каким образом добавить строку в списки? Приведите примеры.

5.Каким образом удалить строку из списка? Приведите примеры.

6.Как получить доступ к i-й строке в списке?

7.Какпоказывать списокв TIistBox внесколько колонок?

8.Что надо сделать, чтобы строки в списке автоматически сортировались?

9.Как выделить строку в списке?

10.Как получить индекс выделенной строки?

11.Как удалить все элементы списка?

12.Как сделать, чтобы список TComboBox раскрывался программно?

13.Как сделать, чтобы введенное в TComboBox число заносилось в список при нажатии Enter?

14.Как определить количество строк в списке?

15.Объясните использование функции InputQuery() для ввода строк и чисел. Приведите фрагмент вашей программы

сиспользованием этой функции.

163

11.ПРОГРАММИРОВАНИЕ ГРАФИКИ

11.1.Классы графического интерфейса

ОС Windows использует так называемый графический интерфейс пользователя (Graphic User Interface – GUI). Основой для рисования в нем служат дескриптор контекста устройства hDC и связанные с ним шрифт, перо и кисть. В качестве устройства может выступать экран, принтер и т.д.

В состав VCL Delphi входят объектно-ориентированные надстройки над объектами GUI.

Класс TScreen

Иерархия:

TObject→TPersistent→TComponent→TScreen

Представляет свойства дисплея, на котором выполняется приложение. Экземпляр данного класса автоматически создается при запуске приложения и доступен под именем Screen.

Вся технология вывода графической информации на экран основывается на понятии «холста» – класс TCanvas. Этот класс объединяет в себе и «холст» (контекст устройства), и «рабочие инструменты» (перо, кисть, шрифт), а также набор функций для рисования типовых графических фигур (графических примитивов). Мы будем называть этот класс канвой. Канва не является компонентом, но она входит в качестве свойства в те из них, которые должны уметь нарисовать себя и отобразить какую-либо информацию. Это большинство видимых элементов (TControl). Для инструментов в Delphi созданы классы TPen, TBrush, TFont. Связанные с этими классами объекты автоматически создаются для видимых элементов и становятся доступными программе через свойства Canvas, Pen, Brush, Font. То есть для видимых элементов автоматически создаются объекты класса TCanvas, доступные через свойство Canvas. В свою очередь,

164

объекты TCanvas инкапсулируют объекты TPen, TBrush, TFont. В составе многих компонентов Delphi имеются свойства Font, Pen, Brush и Canvas соответствующего типа, при помощи которых создаются изображения любых рисунков и текстов. Предком классов TFont, TPen и TBrush является класс TGraphicsObject, происходящий непосредственно от класса TPersistent.

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

При изменении графического объекта возникает событие

OnChange:

property OnChange: TNotifyEvent;

После возникновения этого события графические объекты отображаются с обновленными значениями своих свойств.

В Delphi имеются компоненты, специально предназначенные для создания графических изображений:

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

TShape – используется для создания на форме простых геометрически фигур: квадратов, кругов, эллипсов и т.п.;

TPaintBox – позволяет на этапе выполнения программы создавать несложные рисунки на своей канве Canvas.

Класс TGraphic

Абстрактный класс, инкапсулирующий общие свойства

иметоды трех своих потомков: значка TIcon, метафайла TMetafile

ирастрового изображения TBitMap . Общей особенностью потомков TGraphic является то, что они обычно сохраняются в файлах определенного формата: значки – в файлах *.ICO, метафайлы – вфайлах *.WMF или *.EMF, растровые изображения – в файлах

*.BMP.

Основные методы:

procedure LoadFromFile (const FileName : String);

Загружает графический объект из файла. procedure LoadFromStream (Stream : TStream);

165

Загружает графический объект из потока.

procedure SaveToFile (const FileName : String);

Сохраняет графический объект в файле procedure SaveToStream (Stream : TStream);

Сохраняет графический объект в потоке

Класс TPicture

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

Компонент TImage

Страница Палитры компонентов: Additional

Иерархия: TObject→TPersistent→TComponent→TControl→

TGraphicControl

Компонент класса TImage используется для размещения на форме некоторой картинки. Файл изображения может быть битовой картой (файл с расширением .bmp), пиктограммой (файл с расширением iсо), метафайлом (файл с расширением .wmf).

Класс TImage является непосредственным потомком класса TGraphicControl и, следовательно, принадлежит к семейству графических элементов управления.

Основные свойства:

property Canvas: TCanvas:

Предназначается для формирования изображения на этапе выполнения программы.

property Center: Boolean;

Если свойство имеет значение Тruе, изображение выравнивается по центру компонента, в противном случае изображение помещается в левом верхнем углу компонента. По умолчанию имеет значение False.

property Picture: TPicture;

166

Свойство классового типа TPicture определяет изображение, помещенное в компоненте.

property Stretch: Boolean;

Если свойство имеет значение True, изображение, определяемое свойством Picture, увеличивается или уменьшается до размеров компонента. По умолчанию имеет значение False.

Как и другие графические элементы управления, компонент TImage обрабатывает все события от мыши. События по умолчанию не имеет.

При помещении изображения в компонент TImage на этапе проектирования можно использовать окно задания изображения. Это окно раскрывается при активизации компонента либо при выборе свойства Picture в Инспекторе объектов. Основное поле окна задания изображения предназначено для размещения выбранной картинки. Кроме этого, вокнеимеютсяследующие кнопки:

Load

– для загрузки изображения из файла,

Save

– для записи изображения в файл,

Clear

– для удаления выбранного изображения,

ОК

– для записи в компонент выбранного изображения,

Cancel – для отмены введенных изменений.

Компонент TTimer

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

Страница Палитры компонентов: System

Иерархия:

TObject→TPersistent→TComponent

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

Основные свойства: property Enabled: Boolean;

167

Если свойство имеет значение True, то таймер реагирует на собственное событие OnTimer.

property Interval: Cardinal;

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

1000 (1 секунда).

Крометого, вклассе TTimer определено событие OnTimer:

property OnTimer: TNotifyEvent;

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

11.2.Пример создания приложения с графикой

1.Открыть новое приложение с помощью команды File| New Application. Сохранить проект в вашем рабочем каталоге, выполнив команду меню File|Save Project As.

2.Запустить графический редактор командой Tools|Image

Editor.

3. В графическом редакторе выполнить команду File|New|

Bitmap File(.bmp).

4. В появившемся диалоговом окне Bitmap Properties установить:

Width=300

Height=200

Colors=SuperVGA(256 colors)

4. Создать произвольное изображение, например:

Пример создания заставки

Разработчик Иванов И.И. февраль 2002

168

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

После выбора цвета для символов и фона выполнить команды Edit|Select All и Edit|Cut для очистки рисунка. После этого вставить приведенный выше текст.

5.Выполнить команду File|Save и сохранить изображение

вфайле с именем zast.bmp.

6.Поместить на форму компонент TImage (страница

Additional).

7.Выбрать свойство Picture и войти в редактор свойств (кнопка с тремя точками).

8.В появившемся окне Picture Editor нажать кнопку Load и выбрать файл zast.bmp.

9.Установить свойство AutoSize компонента TImage вTrue.

10.Поместить на форму компонент TTimer (страница System) и установить свойство Interval равным 5000. Форма будет выглядеть следующим образом (рис. 11.1).

Рис. 11.1

11.Активизировать компонент Timer1 двойным щелчком

исоздать следующий обработчик события OnTimer:

169

procedure TForm1.Timer1Timer(Sender: TObject); begin

Image1.Free;

Timer1.Free;

end;

12.Сохранить проект.

13.Запустить проект на выполнение.

14.Изменить обработчик события OnTimer так, чтобы заставка периодически появлялась и исчезала:

procedure TForm1.Timer1Timer(Sender: TObject); begin

if Image1.Visible=True then begin

Timer1.Interval:=8000; Image1.Hide; end

else begin

Timer1.Interval:=2000; Image1.Show; end;

end;

15. Запустить проект на выполнение.

Посмотреть выполнение программы lab10_1.exe

11.3. Графические примитивы

Класс ТРеn

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

Основные свойства:

property Color: TColor;

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

170