Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
яву_кисо_delphi(1)(1).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.26 Mб
Скачать

Лабораторная работа №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 графического инструментария?

___________________________