Технологии программирования. Программирование графических интерфейс
.pdfРис. 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