
- •Курск - 2003
- •Интегрированная среда Delphi
- •Цель лабораторной работы
- •Информационные материалы
- •Главное окно
- •Окно редактора кода
- •Окно дерева объектов
- •Окно браузера
- •Лабораторная работа №2 Основы визуального программирования
- •Лабораторная работа №3 Линейные вычислительные процессы
- •Лабораторная работа №4 Итерационные вычислительные процессы
- •Лабораторная работа №5 Циклические вычислительные процессы
- •Лабораторная работа №6 Обработка строковых данных
- •Лабораторная работа №7 Обработка одномерных массивов
- •Лабораторная работа №8 Обработка матриц
- •Лабораторная работа № 9 Программирование операций с матрицами
- •Лабораторная работа №10 Программирование файловых операций
- •Лабораторная работа №11 Графические средства Delphi
- •Библиография
Лабораторная работа №11 Графические средства Delphi
1.Цель лабораторной работы
Целью лабораторной работы является приобретение практических навыков использования графических средств Delphi
2. Условия: изобразить приближающуюся и удаляющуюся окружность.
3. Используемые компоненты их свойства
№ |
Имя компоненты |
Настраиваемые свойства |
Значения |
Комментарии
|
1 |
2 |
3 |
4 |
5 |
1 |
Form1 (форма) |
BorderIcons
BorderStyle Caption Menu |
{biSystemMenu} {biMinimize} bsSingle Graphics MainMenu1 |
Системное меню Кнопка минимиз. Рамка в 1 пиксель Заголовок формы Главное меню |
2 |
PageControl1 ( набор страниц с закладками) |
Align
MultiLine |
alClient
True |
Выравнивание поло- жения компонента относительно границ своего родителя (alClient) , занимает- ся вся незаполненная другими компонен- тами часть формы Разрешает располо- жение закладок в несколько рядов |
3 |
TabSheet1 (панель ком- понента Page Control1) |
Caption |
&Настройки |
Заголовок панели |
4 |
TabSheet2 (панель ком- понента Page Control1) |
Caption |
&Изображение |
Заголовок панели |
5 |
RG1 (группа зависимых переключа- телей, TRadio- Group ) |
Name Caption
ItemIndex
ItemS |
RG1 Цвет изображения 0
черный, синий …голубой |
Имя Текст в разрыве рамки Индекс выбранного переключателя Содержит список строк с заголовками элементов(см.форм) |
1 |
2 |
3 |
4 |
5 |
6 |
ScrollBar (управление значением величины) |
Min Max Position PageSize
OnChange |
0 10 0 1
ScrollBar1Change |
Минимальное Максимальное Текущее значения Определяет размер табуляции бегунка Событие ( при из- менении значения) |
7 |
GroupBox1 (Панель группиро- вания) |
Сaption |
Режим рисования |
Текст в разрыве рамки компонента-контейнера |
8 |
Speed- Button1 (кнопка для инструмен- тальных па- нелей, раз- мещена на панели группирова- ния) |
AllowAllUp
GroupIndex
Down
Caption OnClick |
True
1
True
* SpeedButton1Click |
Утопленная кнопка отпускается только при нажатии любой другой кнопки, входящей в ту же группу Группа кнопок ( не должен быть равным 0) Индикатор состоя- ния кнопки, True- кнопка утоплена Надпись Событие (щелчок) |
9 |
Speed- Button2 - Speed- Button5 |
Те же свойства, что и для SpeedButton1 |
(Down= false) |
|
10 |
Label1- Label5 (метка) |
Caption
|
См. тексты формы задания |
Текст справа от инструментальной кнопки |
11 |
CLB1 (группа не- зависимых переключа- телей CheckList- Box) |
Name Columns
Items
OnClickCheck (стр Events)
OnMouse |
CLB1 2
сплошная, прерывистая, пунктирная, штрихпунктир- ная, комбиниро- ванная
Clb1ClickCheck
Clb1MouseDown |
Имя компонента Количество колонок опций Содержит опции компоненты
Событие ( при из- менении состояния любого переключа- теля) Событие ( реакция программы на нажа- тие кнопки мыши) |
12 |
BitBtn1 (пиктогра- фическая кнопка) |
Kind |
bkClose |
Разновидность кнопки |
13 |
BitBtn1 (пиктогра- фическая кнопка) |
Caption NumGlyphs
OnClick |
&Нарисовать 2
BitBtn2Click |
Надпись Количество растро- вых изображений Событие ( щелчок) |
14 |
MainMenu1 ( главное меню) |
См лаб. раб. №4 |
|
|
15 |
StaticText |
BorderStyle
BevelInner
BevelKind
|
SbsSunken
bvLowered
bkTill |
«вдавленный» компонент тип внутренней кромки (вдавленная кромка) тип кромок (есть внутренняя и внешняя кромка) |
16 |
Form2 ( форма №2, на которой рисуется за- данное изо- бражение, вызывается из Form1) |
Caption OnАctivate |
Point FormActivate |
Заголовок формы Событие (возникает в момент активи- зации окна) |
17 |
PаintBox1 (окно для рисования, Form2) |
Align |
alClient |
Окно для рисования занимает всю об- ласть формы, не занятую другими компонентами |
18 |
Button1 ( кнопка, Form2) |
Caption OnClick |
Закрыть Button1Click |
Надпись Cобытие ( щелчок)
|
1 |
2 |
3 |
4 |
5 |
19 |
Button2 ( кнопка, Form2) |
Caption OnClick |
Старт Button2Click |
Надпись Событие ( щелчок) |
Компонент TPageControl содержит несколько перекрывающих друг друга полей класса TTabSheet. Каждая панель выбирается связанной с ней закладкой и может содержать свой набор помещённых на неё компонентов. Чтобы на этапе конструирования добавить новую панель или выбрать ранее вставленную , щелкните по компоненту правой кнопкой мыши и выберите NewPage (новая панель), NextPage (следующая панель), Previons Page ( предыдущая панель). Смена панелей идет циклически.
Компонент RG1(TRadioGroup) – группа зависимых переключателей. В этой группе размещаются зависимые переключатели класса TRadioButton. Каждый зависимый переключатель помещается в специальный список Items и доступен по индексу (ItemIndex). Строки Items используются как поясняющие надписи справа от переключателей. Если при активизации формы необходимо, чтобы одни из переключателей был активен, то в свойстве ItemIndex записать номер соответствующего переключателя.
Компонент ScrollBar1- визуальное управление значением числовой величины. Ориентация компонента свойство Кind. С помощью метода procedure SetParams (APosition, AMax, AMin: integer) можно сразу установить свойства Position, Max и Min. Событие OnScroll при любом изменении свойства Position, OnChange при изменении параметров методом SetParams.
Компонент SpeedButton1(2-5)- кнопка для инструментальных панелей. Они могут фиксироваться в утопленном состоянии, не могут закрывать модальное окно и быть умалчиваемыми. В остальном они повторяют свойства и методы TBitBtn. Для фиксации кнопка должна быть отнесена к одной группе (GroupIndex). Свойство AllowAllUp=false- кнопку можно освободить повторным щелчком, true-утопленная кнопка отпускается только при нажатии любой кнопки группы.
Компонент Clb1(TСheckListBox) группа независимых переключателей . Можно обращаться к любому переключателю по индексу (ItemIndex). Чтобы вставить в компонент группу независимых переключателей следует раскрыть редактор его свойства Items и ввести необходимое число текстовых строк.
Компонент PaintBox1- простое окно с канвой для рисования произвольных изображений. Канва содержится в свойстве Canvas, графические инструменты в свойствах Font, Pen, Brush. Рисование осуществляется в обработчике событий OnPaint.
4.Форма задания
5. Текст программы.
unit UMain11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, Menus, StdCtrls, CheckLst, ExtCtrls, Buttons;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
MainMenu1: TMainMenu;
k1: TMenuItem;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
RG1: TRadioGroup;
CLB1: TCheckListBox;
ScrollBar1: TScrollBar;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
SpeedButton5: TSpeedButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
GroupBox1: TGroupBox;
StaticText1: TStaticText;
BitBtn1: TBitBtn;
Label6: TLabel;
BitBtn2: TBitBtn;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
About1: TMenuItem;
procedure N3Click(Sender: TObject);
procedure N1Click(Sender: TObject);
procedure ScrollBar1Change(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure RG1Click(Sender: TObject);
procedure CLB1ClickCheck(Sender: TObject);
procedure CLB1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure SpeedButton4Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure About1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses UPaint, UAbout;
{$R *.dfm}
procedure TForm1.N3Click(Sender: TObject);
begin
ShowMessage('Изобразить приблежающуюся и удаляющуюся окружность');
end;
procedure TForm1.N1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.ScrollBar1Change(Sender: TObject);
var
pos:integer;
begin
pos:=ScrollBar1.Position;
Form2.PaintBox1.Canvas.Pen.Width:=pos;
StaticText1.Caption:=IntToStr(pos);
end;
procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form2.ShowModal;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
PageControl1.ActivePage:=TabSheet1;
CLB1.State[0]:=cbChecked;
end;
procedure TForm1.RG1Click(Sender: TObject);
var
cl:TColor;
begin
if ((RG1.ItemIndex)=0)
then cl:=clBlack
else if((RG1.ItemIndex)=1)
then cl:=clBlue
else if((RG1.ItemIndex)=2)
then cl:=clRed
else if((RG1.ItemIndex)=3)
then cl:=clGreen
else if((RG1.ItemIndex)=4)
then cl:=clYellow
else if((RG1.ItemIndex)=5)
then cl:=clCream
else if((RG1.ItemIndex)=6)
then cl:=clPurple
else cl:=clAqua;
Form2.PaintBox1.Canvas.Pen.Color:=cl;
StaticText1.Font.Color:=cl;
end;
procedure TForm1.CLB1ClickCheck(Sender: TObject);
var
ps :TPenStyle;
begin
ScrollBar1.Position:=1;
ScrollBar1.Enabled:=false;
if(CLB1.State[1]=cbChecked)
then ps:=psDash
else if(CLB1.State[2]=cbChecked)
then ps:=psDot
else if(CLB1.State[3]=cbChecked)
then ps:=psDashDot
else if(CLB1.State[4]=cbChecked)
then ps:=psDashDotDot
else
begin
ps:=psSolid;
ScrollBar1.Enabled:=True;
end;
Form2.PaintBox1.Canvas.Pen.Style:=ps;
end;
procedure TForm1.CLB1MouseDown(Sender: TObject; Button:
TMouseButton; Shift: TShiftState; X, Y: Integer);
var
i:integer;
begin
if(Button=mbLeft)
then for i:=0 to 4 do
Form1.CLB1.State[i]:=cbUnChecked;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Form2.PaintBox1.Canvas.Pen.Mode:=pmCopy;
RG1.Enabled:=True;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Form2.PaintBox1.Canvas.Pen.Mode:=pmWhite;
RG1.Enabled:=False;
end;
procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
Form2.PaintBox1.Canvas.Pen.Mode:=pmBlack;
RG1.Enabled:=False;
end;
procedure TForm1.SpeedButton4Click(Sender: TObject);
begin
Form2.PaintBox1.Canvas.Pen.Mode:=pmNotCopy;
RG1.Enabled:=True;
end;
procedure TForm1.SpeedButton5Click(Sender: TObject);
begin
Form2.PaintBox1.Canvas.Pen.Mode:=pmNot;
RG1.Enabled:=False;
end;
procedure TForm1.About1Click(Sender: TObject);
begin
Form3.ShowModal;
end;
end.
unit UPaint11;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm2 = class(TForm)
PaintBox1: TPaintBox;
Button1: TButton;
Button2: TButton;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
uses UMain;
{$R *.dfm}
procedure TForm2.FormActivate(Sender: TObject);
var
i:integer;
begin
for i:=1 to 300 do
begin
height:=116+i;
width:=116+i;
left:=360-round(i/2);
top:=254-round(i/2);;
end;
end;
procedure TForm2.Button1Click(Sender: TObject);
begin
Close;
end;
procedure TForm2.Button2Click(Sender: TObject);
const
x1=150;
y1=120;
x2=250;
y2=220;
var
i,k:integer;
begin
k:=1;
repeat
for i:=1 to 100 do
begin
PaintBox1.Canvas.Ellipse(x1-i,y1-i,x2+i,y2+i);
sleep(10);
PaintBox1.Refresh;
end;
for i:=100 downto 1 do
begin
PaintBox1.Canvas.Ellipse(x1-i,y1-i,x2+i,y2+i);
sleep(10);
PaintBox1.Refresh;
end;
k:=k+1;
until k=5;
end;
end.
6. Комментарии к тексту программы
Проект включает две формы, содержащиеся в двух модулях: Unit UMain и Unit UPaint содержит главную форму Form1, из которой вызывается Form2. Модуль UPaint должен быть известен форме Form1, поэтому необходимо в Unit UMain записать Uses UPaint.
Форма Form1
Процедура N3Click открывает окно с условиями задания. Инициируется при выборе пункта меню.
Процедура N1Click закрывает окно.
Процедура инициируется при перемещении ползунка компонента. Выбранное значение отображается в свойстве Caption компонента StaticText1. В форму Form2 передается для объекта – перо толщинa линии в пикселях(Form2.PaintBox1.Canvas.Pen.Width:=pos).
Процедура BitBtn2Click открывает вторую форму с модальными свойствами(ShowModal).
Процедура FormCreat возникает при создании окна, но до его появления на экране. Свойство PageControl1.ActivePage:TabSheet1.- реализуется ссылка на активную панель, в данном случае панель с именем настройки.
В процедуре RG1Click определяется номер(индекс) выбранного переключателя. В зависимости от индекса определяется цвет прорисовки.(цвет надписи в компоненте StaticText изменяется). Цвет передается в форму 2: Form2.PaintBox1.Canvas.Pеn.Color:=сl;
В процедуре ClbClickCheck выбирается тип линии. Сплошная линия может иметь различную толщину линии, другой тип линии (из перечисленных в списке компонентов) только толщину, равную 1(поэтому ScrollBar1.Position:=1). Используется переменная PS типа TPenStyle (стиль линий, учитывается только для толщины линии 1 пиксель). Для толстых линий стиль всегда psSolid (сплошная). Свойство cbChecked содержит выбор “да”.
psDash – прерывистая, psDot – пунктирная, psDashDot – штрихпунктирная, psDashDotDot – комбинированная, psSolid – сплошная. Выбранный стиль передается в форму Form2.
Процедура Clb1MouseDown устанавливает свойство State(это свойство содержит состояние переключателя с индексом Index:cbUnСhecked - нет; cbCheked – да). При анализе используется тип TshiftState, содержит признаки, уточняющие обстоятельства возникновения события (ssLeft – нажата левая кнопка мыши), тип TMouseButton определяет одну из трёх кнопок мыши (mbLeft - левая).
Процедуры SpeedButton1-5 выполняют идентичные действия по определению способа взаимодействия линий с фоном (свойство Mode):
pmCopy - инверсия цвета пера (свойство Style игнорируется);
pmWhite – линии всегда белые (свойствa Color и Style игнориру ются);
pmBlack – линии всегда черные (свойства Color и Style игнорируются);
pmNotCopy – инверсия цвета пера (свойство Style игнорируется);
pmNot – инверсия цвета фона (свойства Color и Style игнорируются);
Форма Form2 (модуль UPaint)
При инициализации формы определяются размеры окна рисования (процедура FormActivate).
По кнопке Button1Click закрывается окно Form2.
По кнопке Button2Click осуществляется прорисовка окружности и динамика её изменения. Метод класса Refresh устанавливает в канве умалчиваемые шрифт и кисть (выбранные в Form1).
7. Содержание отчёта
- задание,
- описание свойств используемых компонент и форм,
- текст программы с комментариями,
- результаты вычислений.
8.Тренировочные вопросы к защите:
1. В чем функциональное назначение компонента TTabControl?
2. В чем функциональное назначение компонента TPageControl?
3 Опишите последовательность конструирования новых панелей в компоненте TPageControl.
4. В чем функциональное назначение компонента TRadioGroup?
5. Какое свойство содержит список переключателей в компоненте TRadioGroup?
6. Что содержит свойство ItemIndex компонента TRadioGroup?
7. Опишите последовательность формирования содержимого компонента TRadioGroup.
8 .В чем функциональное назначение компонента TScrollBar?
9 Какие события связаны с компонентом TScrollBar?
10. Какое свойство содержит текущее значение числовой величины компонента TScrollBar?
11. Как изменяется внешний вид компонента TScrollBar, если задано
TScrollBar.Enable:=false
12. В чем функциональное назначение компонента TSpeedButton ?
13. Какое свойство определяет поведение компонента TSpeedButton?
14. Какое свойство служит индикатором состояния компонента TSpeedButton?
15. В чем функциональное назначение компонента TСheckListBox?
16.Что определяет свойство BorderStyle, Checked, ItemIndex, Items компоненты TCheckListBox?
17. В чем функциональное назначение компонента TPaintBox?
18. Что определяет свойства Canvas, Font, Pen, Brush графического инструментария?
___________________________