- •Методические указания по выполнению лабораторно-практических работ
- •1 Решим простейший пример: найти сумму трех чисел.
- •Программирование циклических алгоритмов. Циклы «до» и «пока»
- •Лабораторная работа №10
- •Оператор параметрического цикла for
- •Работа с массивами
- •Оператор варианта
- •Работа со строками в объектно-ориентированном программировании. Оператор цикла с параметрами
- •Лабораторная работа №7
- •Процедуры и функции
- •Практические задания
- •Лабораторная работа №8
- •1. Программа, которая определяет, есть ли одинаковые числа в трехзначном числе.
- •2. В одномерном массиве вывести на экран четные числа и нечетные числа.
- •3. Из введенной последовательности символов, признаком конца которой является '0', сформировать множество заглавных и строчных латинских букв.
- •Множественный тип
- •Практические задания
- •Лабораторная работа №9
- •Label Edit Button Memo
- •Лабораторная работа №10
- •Лабораторная работа №11
- •Implementation
- •Лабораторная работа №12
- •Лабораторная работа №13
- •Лабораторная работа №14
- •Implementation
- •Практическая работа Случайный выбор из списка
- •Практическая работа «Тест»
- •Типы бд в Delphi
- •1. Создание каталога
- •2. Создание псевдонима
- •3. Создание таблицы
- •4. Разработка приложения, работающего с бд
- •Создание каталога и псевдонима
- •Создание таблицы
- •Создание формы
- •Вставка изображений в бд
- •Заключение
Лабораторная работа №14
Тема: Использование компонентов отображения.
Цель работы - создать программу, выполняющую следующие действия:
После запуска программы в окне изображается рисунок.
Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Описание плана разработки программы
Открыть новый проект.
Разместить на форме экземпляры компонентов: панель Panel, рисунок Image, диалоговое окно OpenDialog.
Выполнить следующие действия:
Таблица 6. Свойства проекта 7
Выделенный объект |
Вкладка окна Object Inspector |
Имя свойства/ имя события |
Действие |
Form1 |
Properties |
Caption |
Установка имени формы «Альбом» |
Panel1 (Вкладка Standard) |
Properties |
Caption |
Очистите значение свойства Caption |
BevelOuter |
Выбрать в раскрывающемся списке значение bvLowered | ||
BevelInner |
Выбрать в раскрывающемся списке значение bvNone | ||
BewelWidth |
Присвоить значение 2 | ||
Width |
Присвоить значение 241 | ||
Height |
Присвоить значение 185 | ||
Image1 (Вкладка Additional) |
Properties |
Left |
Присвоить значение 2 |
Top |
Присвоить значение 2 | ||
Width |
Присвоить значение 237 | ||
Height |
Присвоить значение 181 | ||
Stretch |
Включить свойство True | ||
Picture |
С помощью кнопки-построителя открыть диалоговое окно Picture Editor (Редактор изображений). Щелкнуть на кнопке Load (Загрузить) – откроется диалоговое окно Load Picture (Загрузка рисунка). Открыть папку C:\Windows и выбрать файл Лес.bmp, щелкнуть на кнопке Открыть. Вернуться в окно Редактора изображений, щелкнуть на кнопке OK. | ||
Image1.Picture.LoadFromFile (OpenDialog1.FileName); | |||
Events |
OnClick |
OpenDialog1.Execute; | |
OpenDialog1 (Вкладка Dialogs) |
Properties |
Title |
Ввести текст: «Выбор изображения» |
FileName |
Ввести полный путь доступа к файлу: C:\Windows\Лес.bmp | ||
Filter |
Ввести текст: Растровое изображение (*.bmp)|*.bmp | ||
DefaultExt |
Присвоить свойству значение: .bmp | ||
Options |
Подсвойству ofFileMustExit (Файл должен существовать) присвоить значение True (Да) |
Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
procedure TForm1.Image1Click (Sender: TObject);
begin
OpenDialog1.Execute;
Image1.Picture.LoadFromFile (OpenDialog1.FileName);
end;
Лабораторная работа №15.
Тема: Использование компонентов редактирования.
Цель работы -
Создать программу, выполняющую следующие действия:
После запуска программы в окне изображается строка меню (Файл, Выход).
При выборе пункта меню Файл появляются пункты меню (Рисунки, Выход).
При выборе пункта меню Рисунки появляется вложенное меню, состоящее из двух пунктов (Облака, Лес).
По щелчку правой кнопки мыши появляется контекстное меню.
Выбрать по пункту другой рисунок
Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Если выбрать любой из пунктов Выход, работа программы завершается.
Описание плана разработки программы
Открыть новый проект.
Разместить на форме экземпляры компонентов: панель Panel, рисунок Image, диалоговое окно OpenDialog.
Выполнить следующие действия:
Таблица 7. Свойства проекта 8
Выделенный объект |
Вкладка окна Object Inspector |
Имя свойства/ имя события |
Действие |
Form1 |
Properties |
Caption |
Установка имени формы «Мое меню» |
Events |
OnMouseDown |
var p:TPoint; begin p.X :=X; p.Y :=Y; p := ClientToScreen (p); PopupMenu1.Popup (p.X, p.Y); end; | |
Запустить редактор меню (дважды щелкнуть на значке меню на форме) | |||
Form1.MainMenu1 |
Properties (в окне Object Inspector не выбран никакой объект) |
Caption |
Ввести текст пункта меню – Файл, и нажать Enter. Система присвоит ему имя N1 |
Между существующими и будущими пунктами меню можно переключаться с помощью щелчка мыши или курсорных клавиш. | |||
Form1.MainMenu1
|
Properties
|
Caption |
Ввести текст пункта меню – Выход, и нажать Enter. Система присвоит ему имя N2. |
Events (щелкнуть на пункте Выход в строке меню) |
N2Click |
Close; | |
Щелкните на пункте Файл. Редактор меню создал еще одну заготовку под этим пунктом. Это заготовка для меню, которое откроется при выборе пункта Файл в работающей программе. Используя заготовки, создайте в этом меню два пункта: Рисунки (система присвоит ему имя N3) и Выход (N4). Выберите в редакторе меню пункт Рисунки и нажмите комбинацию клавиш Ctrl + Вправо. | |||
N4: TMenuItem |
Events
|
OnClick
|
Выберем из раскрывающегося списка уже существующую процедуру-обработчик N2Click |
Form1.MainMenu1 |
Properties |
Caption |
Ввести текст пункта меню – Облака, и нажать Enter. Система присвоит ему имя N5. |
N5: TMenuItem |
Events (выбрать в строке меню на форме пункт Облака) |
OnClick
|
Image1.Picture.LoadFromFile (‘C:\Windows\Облака.bmp’); |
Form1.MainMenu1 |
Properties |
Caption |
Ввести текст пункта меню – Лес, и нажать Enter. Система присвоит ему имя N6. |
N6: TMenuItem |
Events (выбрать в строке меню на форме пункт Лес) |
OnClick |
Image1.Picture.LoadFromFile (‘C:\Windows\Лес.bmp’); |
Закройте окно редактора меню и убедитесь, что теперь строка меню появилась в основной форме программы. |
Продолжение таблицы 7. | |||
Выделенный объект |
Вкладка окна Object Inspector |
Имя свойства/ имя события |
Действие |
PopupMenu (Вкладка Standard) |
Properties |
Caption |
Ввести текст пункта меню – Облака, и нажать Enter. Система присвоит ему имя N7. |
Caption |
Ввести текст пункта меню – Лес, и нажать Enter. Система присвоит ему имя N8. | ||
N7 |
Events |
OnClick |
Выберем из раскрывающегося списка уже существующую процедуру-обработчик N5Click |
N8 |
Events |
OnClick |
Выберем из раскрывающегося списка уже существующую процедуру-обработчик N6Click |
Image (Вкладка Additional) |
Properties |
Stretch |
Присвоить значение True |
Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
procedure TForm1.N2Click (Sender: TObject);
begin
Close;
end;
procedure TForm1.N5Click (Sender: TObject);
begin
Image1.Picture.LoadFromFile (‘C:\Windows\Облака.bmp’);
end;
procedure TForm1.N6Click (Sender: TObject);
begin
Image1.Picture.LoadFromFile (‘C:\Windows\Лес.bmp’);
end;
procedure TForm1.FormMouseDown
(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X. Y: Integer);
var p:TPoint;
begin
p.X :=X;
p.Y :=Y;
p := ClientToScreen (p);
PopupMenu1.Popup (p.X, p.Y);
end;
Лабораторная работа №16.
Тема: Использование компонентов многострочного редактора для обработки строковых данных.
var
x,y: integer; // координаты корабля (базовой точки)
// вычерчивает на поверхности формы кораблик
// или стирает его
procedure Parohod(x,y: integer; mode: boolean);
// x,y - координаты базовой точки кораблика
// mode: True - нарисовать, False - стереть
const
{ Базовые точки кораблика находятся в узлах сетки,
шаг которой определяет размер кораблика. }
dx = 5; // шаг сетки по X
dy = 5; // шаг сетки по Y
var
// корпус и надстройку будем рисовать
// при помощи метода Polygon
p1: array[1..7]of TPoint; // координаты точек корпуса
p2: array[1..8]of TPoint; // координаты точек надстройки
pc,bc: TColor; // текущий цвет карандаша и кисти
begin
if not mode then
begin
// стереть
Form1.Canvas.Brush.Color := clNavy;
Form1.Canvas.Pen.Color := clNavy;
Form1.Canvas.Rectangle(x,y+1,x+17*dx,y-10*dy);
Form1.Canvas.Brush.Color := clNavy;
// небо
if y-10*dy < 80 then
begin
// конец мачты на фоне неба
Form1.Canvas.Pen.Color := clSkyBlue;
Form1.Canvas.Brush.Color := clSkyBlue;
Form1.Canvas.Rectangle(x,y-10*dy,x+17*dx,80);
end;
exit;
end;
// рисуем
with Form1.Canvas do
begin
pc :=Pen.Color; // сохраним текущий цвет карандаша
bc := Brush.Color; // и кисти
Pen.Color:=clBlack; // установим нужный цвет
Brush.Color := clWhite;
// рисуем ...
// корпус
p1[1].X := x; p1[1].y := y;
p1[2].X := x; p1[2].Y := y-2*dy;
p1[3].X :=x+10*dx; p1[3].Y := y-2*dy;
p1[4].X :=x+11*dx; p1[4].Y := y-3*dy;
p1[5].X :=x+17*dx; p1[5].Y :=y-3*dy;
p1[6].X :=x+14*dx; p1[6].Y :=y;
p1[7].X :=x; p1[7].Y :=y;
Polygon(p1);
// надстройка
p2[1].X := x+3*dx; p2[1].Y := y-2*dy;
p2[2].X := x+4*dx; p2[2].Y := y-3*dy;
p2[3].X := x+4*dx; p2[3].Y := y-4*dy;
p2[4].X := x+13*dx; p2[4].Y := y-4*dy;
p2[5].X := x+13*dx; p2[5].Y := y-3*dy;
p2[6].X := x+11*dx; p2[6].Y := y-3*dy;
p2[7].X := x+10*dx; p2[7].Y := y-2*dy;
p2[8].X := x+3*dx; p2[8].Y := y-2*dy;
Polygon(p2);
MoveTo(x+5*dx,y-3*dy);
LineTo(x+9*dx,y-3*dy);
// капитанский мостик
Rectangle(x+8*dx,y-4*dy,x+11*dx,y-5*dy);
// труба
Rectangle(x+7*dx,y-4*dy,x+8*dx,y-7*dy);
// иллюминаторы
Ellipse(x+11*dx,y-2*dy,x+12*dx,y-1*dy);
Ellipse(x+13*dx,y-2*dy,x+14*dx,y-1*dy);
// мачта
MoveTo(x+10*dx,y-5*dy);
LineTo(x+10*dx,y-10*dy);
// оснастка
Pen.Color := clWhite;
MoveTo(x+17*dx,y-3*dy);
LineTo(x+10*dx,y-10*dy);
LineTo(x,y-2*dy);
Pen.Color:=pc; // восстановим старый цвет карандаша
end;
end;
// обработка сигнала таймера
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Parohod(x,y, False); // стереть рисунок
if x < Form1.ClientWidth
then x := x+2
else begin // новый рейс
x := 0;
y := Random(50) + 100;
end;
Parohod(x,y,True); // нарисовать в новой точке
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
// небо
Canvas.Brush.Color := clSkyBlue;
Canvas.Pen.Color := clSkyBlue;
Canvas.Rectangle(0,0,ClientWidth,80);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
x:=0; y:=80; // исходное положение парохода
Form1.Color:=clNavy; // цвет моря
Timer1.Interval := 50; // сигнал таймера каждые 50 мСек
end;
end.
Лабораторная работа №17.
Тема Использование компонентов многострочного редактора для одномерных массивов.
StringGrid
ColCount |
2 |
Color |
clWindow |
FixedColor |
clWindow |
FixedCols |
0 |
FixedRows |
1 |
Height |
129 |
Options |
|
goFixedVertical |
true |
goFixedHorizontal |
true |
goEditing |
true |
RowCount |
5 |
TabOrder |
0 |
Top |
24 |
Width |
177 |
const
NR= 4; // кол-во строк в таблице
var
n: array[1..NR] of real; p: array[1..NR] of real; h: array[1..NR] of integer;
BarColor: array[1..4] of TColor = (clRed,clGreen,clBlue,clYellow);
// если исх. данные введены, то Obr=TRUE
function Obr : boolean;
var
sum: real;
m:integer;
i:integer;
begin
obr:=FALSE; // пусть исх. данные не введены
// скопируем содержимое второго столбца
// в массив исходных данных
fori:=1toNRdo
// здесь возможно исключение (ошибка) преобразования
// если пользователь не ввел данные
begin
try
n[i] := StrToFloat(Form1.StringGrid1.Cells[1,i]);
except
on EConvertError do
begin
ShowMessage('Надо ввести данные во все' + #13 +
'ячейки второй колонки.');
exit;
end;
end;
end;
sum := 0;
for i:=1 to NR do
sum:=sum+n[i];
// вычислим процент каждой категории
for i:=1 to NR do
p[i] := n[i] / sum;
// определим категорию с максимальным значением
m:= 1;
for i := 2 to NR do
if n[i] > n[m] then m:=i;
// столбик высотой в Image1.Height-20 пикселей
for i :=1 to NR do
h[i] := Round((Form1.Image1.Height - 20) * n[i]/n[m]);
obr := TRUE;
end;
// диаграмма
procedure diagr;
const
WR= 25; // ширина столбика
DR= 10; // расстояние между столбиками
Varx,y:integer; // левый нижний угол столбика
i: integer;
begin
with Form1.Image1 do
begin
x:=10;
y:=Height;
Canvas.Brush.Color := clWindow;
Canvas.Rectangle(0,0,Width,Height);
// *** рисуем столбики ***
for i:=1 to 4 do
begin
Canvas.Brush.Color := BarColor[i]; // цвет столбика
Canvas.Rectangle(x,y,x+WR,y-h[i]); // столбик
Canvas.Brush.Color:=clWindow; // чтобы область за текстом
// не была окрашена
// подпись данных (над столбиком)
Canvas.TextOut(x,y-h[i]-15,
FloatToStrF(p[i]*100,ffGeneral,3,2)+'%');
x := x + WR + DR;
end;
x := x + 20;
y:=20; // 20 пикселей от верхнего краяImage1
for i:=1 to 4 do
begin
Canvas.Brush.Color := BarColor[i];// цвет прямоугольника легенды
Canvas.Rectangle(x,y,x+25,y+14); // прямоугольник легенды
Canvas.Brush.Color := clWindow;
Canvas.TextOut(x+WR+10,y,
Form1.StringGrid1.Cells[0,i]);
y := y + 20;
end;
end; // with Form1.Image1
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
if Key = #13 then
begin
// нажата клавиша <Enter>
if StringGrid1.Col < StringGrid1.ColCount - 1
then
// ячейка не в последнем столбце
StringGrid1.Col := StringGrid1.Col + 1 // к след столбцу
else
// ячейка в последнем столбце
if ( StringGrid1.Row < StringGrid1.RowCount - 1 ) then
begin
StringGrid1.Col :=0;
StringGrid1.Row := StringGrid1.Row +1;
end
else Button1.SetFocus;
exit;
end;
if StringGrid1.Col = 1 then
case Key of
'0'..'9',#8: ;
'.',',':
begin
Key := DecimalSeparator;
if Pos(DecimalSeparator,
StringGrid1.Cells[StringGrid1.Row,
StringGrid1.Col]) <> 0
then Key := Char(0);
end;
else Key := Char(0);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Obr then diagr;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
StringGrid1.Cells[0,0] := 'Категория';
StringGrid1.Cells[1,0] := 'Кол-во';
StringGrid1.Width :=
StringGrid1.ColWidths[0] + StringGrid1.ColWidths[1]+5;
end;
end.
Лабораторная работа №18.
Тема Использование компонентов списков и выпадающих списков
var
Form1: TForm1;
implementation
{$R *.dfm}
// Функция, график которой надо построить
Function f(x:real):real;
begin
f:=2*cos(x)*exp(x/5);
end;
// строит график функции
procedure GrOfFunc;
var
x1,x2:real; // границы изменения аргумента функции
y1,y2:real; // границы изменения значения функции
x:real; // аргумент функции
y:real; // значение функции в точке x
dx:real; // приращение аргумента
l,b:integer; // левый нижний угол области вывода графика
w,h:integer; // ширина и высота области вывода графика
mx,my:real; // масштаб по осям X и Y
x0,y0:integer; // точка - начало координат
begin
// область вывода графика
l:=10; // X - координата левого верхнего угла
b:=Form1.ClientHeight-20; // Y - координата левого верхнего угла
h:=Form1.ClientHeight-40; // высота
w:=Form1.Width-40; // ширина
x1:=0; // нижняя граница диапазона аргумента
x2:=25; // верхняя граница диапазона аргумента
dx:=0.01; // шаг аргумента
// найдем максимальное и минимальное значения
// функции на отрезке [x1,x2]
y1:=f(x1); // минимум
y2:=f(x1); // максимум
x:=x1;
repeat
y := f(x);
if y < y1 then y1:=y;
if y > y2 then y2:=y;
x:=x+dx;
until (x>=x2);
// вычислим масштаб
my:=h/abs(y2-y1); // масштаб по оси Y
mx:=w/abs(x2-x1); // масштаб по оси X
// оси
x0:=l;
y0:=b-Abs(Round(y1*my));
with form1.Canvas do
begin
// оси
MoveTo(l,b);LineTo(l,b-h);
MoveTo(x0,y0);LineTo(x0+w,y0);
TextOut(l+5,b-h,FloatToStrF(y2,ffGeneral,6,3));
TextOut(l+5,b,FloatToStrF(y1,ffGeneral,6,3));
// построение графика
x:=x1;
repeat
y:=f(x);
Pixels[x0+Round(x*mx),y0-Round(y*my)]:=clRed;
x:=x+dx;
until (x>=x2);
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
GrOfFunc;
end;
// изменился размер окна программы
procedure TForm1.FormResize(Sender: TObject);
begin
// очистить форму
form1.Canvas.FillRect(Rect(0,0,ClientWidth,ClientHeight));
// построить график
GrOfFunc;
end;
end.
Лабораторная работа №19.
Тема Использование компонентов таблиц для работы с двумерным массивом.
2)
var
Form1: TForm1;
implementation
{$R *.dfm}
var
p: integer = 5; // порядок кривой
u: integer = 7; // длина штриха
{ Кривая Гильберта состоит из четырех соединенных
прямыми элементов: a,b,cиd.
Каждый элемент строит соответствующая процедура. }
procedure a(i:integer; canvas: TCanvas); forward;
procedure b(i:integer; canvas: TCanvas); forward;
procedure c(i:integer; canvas: TCanvas); forward;
procedure d(i:integer; canvas: TCanvas); forward;
// Элементы кривой
procedure a(i: integer; canvas: TCanvas);
begin
if i > 0 then begin
d(i-1, canvas); canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
a(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
a(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
c(i-1, canvas);
end;
end;
procedure b(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
c(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
b(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
b(i-1, canvas); canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
d(i-1, canvas);
end;
end;
procedure c(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
b(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
c(i-1, canvas); canvas.LineTo(canvas.PenPos.X-u,canvas.PenPos.Y);
c(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
a(i-1, canvas);
end;
end;
procedure d(i: integer; canvas: TCanvas);
begin
if i > 0 then
begin
a(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y+u);
d(i-1, canvas); canvas.LineTo(canvas.PenPos.X+u,canvas.PenPos.Y);
d(i-1, canvas); canvas.LineTo(canvas.PenPos.X,canvas.PenPos.Y-u);
b(i-1, canvas);
end;
end;
procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.MoveTo(u,u);
a(5,Form1.Canvas); // вычертить кривую Гильберта
end;
end.
Лабораторная работа №20.
Тема Использование компонентов кнопок обычных, графических и с фиксацией.
Практическая работа «Светофор»
Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Описание плана разработки программы
Открыть новый проект.
Разместить на форме экземпляры компонентов: фигура Shape.
Выполнить следующие действия:
Таблица 14. Свойства проекта 14
Выделенный объект |
Вкладка окна ObjectInspector |
Имя свойства/ имя события |
Действие |
Form1 |
Properties |
Caption |
Установка имени формы «Светофор» |
Height |
Присвоить значение 300 | ||
Width |
Присвоить значение 120 | ||
BorderIcons (Служебные кнопки) |
Выбрать для подсвойства biMinimize(Сворачивание) иbiMaximize(Разворачивание) значениеFalse | ||
Color |
Задать стандартный серый цвет | ||
BorderStyle (Стиль рамки) |
Выбрать значение bsSingle | ||
Events |
OnMouseMove |
В процедуру передаются дополнительные параметры: Shift– указывает, не была ли при перемещении нажата клавишаSHIFT,CTRLилиALT;X- горизонтальная координата указателя мыши;Y- вертикальная координата указателя. | |
Продолжение таблицы 14. | |||
Выделенный объект |
Вкладка окна Object Inspector |
Имя свойства/ имя события |
Действие |
Shape1 (Вкладка Additional) |
Properties
|
Height |
Присвоить значение 61 |
Width |
Присвоить значение 61 | ||
Shape (Форма) |
Выбрать значение stCircle (Круг) | ||
Pen (Контур) |
Выбрать для подсвойства Color(Цвет) значениеclRed(красный цвет) | ||
Brush (Кисть) |
Выбрать для подсвойства Style(стиль) значениеbsClear(прозрачный) | ||
Enabled (Включен) |
Выбрать значение False (Нет) | ||
Shape2 (Вкладка Additional)
|
Properties
|
Height |
Присвоить значение 61 |
Width |
Присвоить значение 61 | ||
Shape |
Выбрать значение stCircle (Круг) | ||
Pen |
Выбрать для подсвойства Color(Цвет) значениеclYellow(желтый цвет) | ||
Brush |
Выбрать для подсвойства StyleзначениеbsClear | ||
Enabled (Включен) |
Выбрать значение False (Нет) | ||
Shape3 (Вкладка Additional)
|
Properties
|
Height |
Присвоить значение 61 |
Width |
Присвоить значение 61 | ||
Shape |
Выбрать значение stCircle (Круг) | ||
Pen |
Выбрать для подсвойства Color(Цвет) значениеclLime(ярко-зеленый цвет) | ||
Brush |
Выбрать для подсвойства StyleзначениеbsClear | ||
|
|
Enabled (Включен) |
Выбрать значение False (Нет) |
Написать функцию OnShape, которая вызывается из процедурыFormMouseMove.
Работа функции определяет следующие события:
Если указатель мыши не наведен на лампочку, то ее цвет будет прозрачным.
Если указатель мыши наведен на лампочку, то ее цвет будет соответствовать цветам светофора.
r:=sh.Widthdiv2; {r- радиус фигуры}
cx:=sh.Left+r; {cx,cy– координаты центра фигуры}
cy:=sh.Top+r;
d2 := (X–cx) * (X–cx) + (Y–cy) * (Y–cy); {d2 – квадрат расстояния от центра}
OnShape:=bsClear; {указатель мыши не наведен на лампочку, т.е. находиться за пределами фигуры}
ifd2 >r*rthenObShape:=bsSolid; {указатель мыши наведен на лампочку, т.е. находиться внутри фигуры}
Выравнивание элементов:
Выделить все три фигуры.
Выбрать команду Edit→Align(Правка → Выровнить).
Откроется диалоговое окно Alignment(Выравнивание).
Установить слева переключатель CenterinWindow(Центрировать в окне).
Установить справа переключатель SpaceEqually(С равными промежутками).
Щелкнуть на кнопке OK.
Сохраните проект, запустите и протестируйте его.
Листинг подпрограммы
Function OnShape (sh: TShape; X, Y: Integer): TBrushStyle;
var r, cx, cy, d2: Integer;
begin
r := sh.Width div 2;
cx := sh.Left + r;
cy := sh.Top + r;
d2 := (X - cx) * (X - cx) + (Y - cy) * (Y - cy);
OnShape := bsClear;
if d2 > r*r then OnShape:= bsSolid;
end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
Shape1.Brush.Color := clRed;
Shape1.Brush.Style := OnShape (Shape1, X, Y);
Shape2.Brush.Color := clYellow;
Shape2.Brush.Style := OnShape (Shape2, X, Y);
Shape3.Brush.Color := clLime;
Shape3.Brush.Style := OnShape (Shape3, X, Y);
end;
end.
Лабораторная работа №21.
Тема Использование компонентов таймера для управления при выполнении программы.
Практическая работа «Узоры»
Описание плана разработки программы
Открыть новый проект.
Разместить на форме экземпляры компонентов: область рисования PaintBox, таймерTimer.
Область рисования представить в виде клеток (точек или пикселов). Каждая клетка покрашена в свой цвет. В ходе программы цвета меняются.
Описать предварительно константы в окне кода пред ключевым словом:
Const size = 40;
csize = 12;
Colors: array [1..16] of TColor =
(clRed, clGreen, clYellow, clBlue, clWhite, clGray, clFuchsia, clTeal,
clNavy, clMaroon, clLime, clOlive, clPurple, clSilver, clAqua, clBlack);
Константа sizeзадает число клеточек по каждому направлению, константаcsize– число используемых цветов. МассивColors(константа) определяет цвета.
В разделе описаний после ключевого слова varописывается массив клеток
Points: array[1..size, 1..size] of Integer;
Выполнить следующие действия:
Таблица 25. Свойства проекта 28
Выделенный объект |
Вкладка окна ObjectInspector |
Имя свойства/ имя события |
Действие |
Form1 |
Properties |
Caption |
Установка имени формы «Узор» |
Events |
OnCreate |
В процедуре обеспечить неповторимость случайных чисел с помощью процедуры Randomize. Провести инициализацию массива пикселов. | |
PaintBox1 (Вкладка System) |
Properties |
Height |
Задать значение 320 |
Width |
Задать значение 320 |
Продолжение таблицы 25
Выделенный объект |
Вкладка окна ObjectInspector |
Имя свойства/ имя события |
Действие |
|
|
Canvas |
Свойства и методы этого свойства обеспечивают рисование. Метод Rectangleрисует прямоугольник с заданными вершинами. Цвет контура задается свойствомPen.Color, а цвет закраски – свойствомBrush.Color. |
Timer1 (Вкладка System) |
Properties |
Interval |
Задать значение 100 (одна десятая секунды) |
Events |
OnTimer |
В созданной процедуре-заготовке Timer1Timerописать переменныеc(color),up(up),d(down),l(left),r(right). Новые значения цветов записываются в отдельном массивеNewPoints. Написать правила, по которым будут меняться цвета. |
Листинг подпрограммы
procedure TForm1.FormCreate (Sender: TObject);
vari, j : Integer;
begin
Randomize;
for i := 1 to size do {инициализация массива пикселов}
for i := 1 to size do
Points[i,j] := 1 +Random(csize); {Минимально возможное значение элемента массива равно 1}
end;
procedureTForm1.Timer1Timer (Sender: TObject);
vari, j : Integer;
c, l, r, u, d : Integer;
newPoints: array [1..size, 1..size] of Integer;
begin
{Вычислить, какого цвета будет клетка на следующем шаге}
for i := 1 to size do
for j := 1 to size do
begin
c:=Points[i,j] + 1;{Вычисляется «следующий цвет» и запоминается в переменной с}
ifc>csizethenc:= 1; {После последнего цвета идет первый}
{Вычисляются индексы для клеток, примыкающих к данной сверху, снизу, слева и справа. Края узора как бы «склеены» друг с другом}
u:=i– 1;
if u = 0 then u := size;
d := i + 1;
if d > size then d := 1;
l := j – 1;
if l = 0 then l := size;
r := j + 1;
if r > size then r := 1;
newPoints[i,j] :=Points[i,j]; {Если среди «соседей» цвет отсутствует, то клетка остается без изменений}
{Если хотя бы один из «соседей» имеет такой цвет, клетка перекрашивается}
if (Points [u, j] = c) or (Points [d, j] = c) or (Points [i, l] = c) or (Points [i, r] = c)
thennewPoints [i, j] := c;
end;
c:= 320divsize; {Выбирается размер клетки так, чтобы узор занимал, по возможности, всю область рисования}
{Обновляется узор на экране}
for i := 1 to size do
for j := 1 to size do
begin
Points [i, j] := newPoints [i, j];
{Настроить цвет контура прямоугольника и цвет закраски}
PaintBox1.Canvas.Pen.Color := Colors[Points[i, j]];
PaintBox1.Canvas.Brush.Color := Colors[Points[i, j]];
{Выполнить рисование}
PaintBox1.Canvas.Rectangle (c*(i - 1), c*(j - 1), c*i – 1, c*j – 1);
{Параметры метода Rectangleподобраны так, чтобы между клетками оставался небольшой зазор. Чтобы клетки располагались вплотную друг к другу, заменить (c*(i- 1),c*(j- 1),c*i– 1,c*j– 1) на (c*(i- 1),c*(j- 1),c*i,c*j}
end;end;
Лабораторная работа №22.
Тема Использование компонентов зависимых и не зависимых переключателей.
Практическая работа Графика
Для рисования статичных рисунков используется компонент PaintBox (панель System). Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать.
Цель работы - создать программу, выполняющую следующие действия:
Разместить на форме компонент PaintBox.
Заполнить доступную канву 300 красными точками в случайных позициях по нажатиям на некоторую кнопку.
Для выхода из программы необходимо щелкнуть мышью на закрывающей кнопке в строке заголовка.
Записать код в обработчике нажатия.
procedure TForm1.Button1Click(Sender: TObject); var i,x,y: Integer; begin
randomize; for i := 1 to 300 do begin x := random(100); y := random(100); PaintBox1.Canvas.Pixels[x,y] := RGB(255,0,0); end end;
Изменить RGB(255,0,0) на RGB(random(255),random(255),random(255) ).
Заполнить фон черным цветом перед началом выполнения программы с помощью метода канвы FillRect. Метод вызывается с указанием прямоугольной области заливки цветом: FillRect(Rect(0, 0, 100, 100)) // координаты верхнего левого и правого нижнего углов
Вложенное слово Rect формирует данное типа "прямоугольник". Перед вызовом FillRect надо указать цвет заливки: PaintBox1.Canvas.Brush.Color:=RGB(0,0,0);
procedure TForm1.Button1Click(Sender: TObject); var i,x,y: Integer; begin
PaintBox1.Canvas.Brush.Color := RGB(0,0,0);
PaintBox1.Canvas.FillRect(Rect(0,0,100,100));
for i := 1 to 300 do begin x := random(100); y := random(100); PaintBox1.Canvas.Pixels[x,y] := RGB(random(255),random(255),random(255));
end end;
Заполнить канву случайными разноцветными линиями разной толщины. Линия рисуется с помощью методов (сначала задается начальная точка, потом конечная):
PaintBox1.Canvas.MoveTo(10,10);
PaintBox1.Canvas.LineTo(50,50);
Цвет линии и толщина задаются свойством канвы Pen (карандаш). Pen.Color - цвет карандаша), Pen.Width - толщина линии в пикселах (по умолчанию - 1).
for i := 1 to 300 do
begin
PaintBox1.Canvas.Pen.Color := RGB(random(255),random(255),random(255));
PaintBox1.Canvas.Pen.Width := random(3)+1;
x := random(100);
y := random(100);
PaintBox1.Canvas.MoveTo(x,y);
x := random(100);
y := random(100);
PaintBox1.Canvas.LineTo(x,y); end
Заполнить канву эллипсами случайным образом (круги, окружности - частный случай эллипса). Эллипсы рисуются методом Ellipse() с четырьмя параметрами - координатами верхнего левого и правого нижнего углов прямоугольника, в который эллипс вписывается. Кайма эллипса рисуется в соответствии с параметрами свойства Pen канвы, а заливается эллипс внутри цветом кисти Brush канвы.
for i:= 1to 300do begin // цвет и ширина каймы будущего эллипса PaintBox1.Canvas.Pen.Color:=RGB(random(255),random(255),random(255)) ; PaintBox1.Canvas.Pen.Width:=random(3)+1;
// цвет заливки внутренности эллипса PaintBox1.Canvas.Brush.Color:=rgb(random(255),random(255),random(255)) ;
// координаты углов прямоугольника, в который вписывается эллипс x := random(150); y := random(150); x2 := random(150); y2 := random(150);
// вписываем эллипс PaintBox1.Canvas.Ellipse(x,y,x2,y2); end;
Создать графический образ так называемого множества Жюлиа.
procedure TForm1.Button1Click(Sender: TObject); var RE,IM,RE1,IM1: REAL ; V,X,Y : INTEGER;
// вывод точки заданного цвета procedure PUTPIXEL(x,y,c:Integer); var cc: TColor; begin
case c mod 8 of 0:cc:=clBlack; 1:cc:=clRed; 2:cc:=clLime; 3:cc:=clYellow; 4:cc:=clBlue; 5:cc:=clFuchsia; 6:cc:=clAqua; 7:cc:=clWhite; end;
PaintBox1.Canvas.Pixels[x,y] := cc; end;
procedure QWA ; begin RE1:=RE*RE-IM*IM;
IM1:=2*RE*IM;
RE:=RE1;
IM:=IM1; end; procedure KUB;
begin
RE1:=RE*(RE*RE-3*IM*IM); IM1:=IM*(3*RE*RE-IM*IM);
RE:=RE1;
IM:=IM1;
end ; Begin PaintBox1.Canvas.Brush.Color := rgb(0,0,0); PaintBox1.Canvas.FillRect(Rect(0,0,640,480));
X:=-320 ; REPEAT Y:=-240 ; REPEAT V:=0 ; RE:=-1.+0.001*X ; IM:=0+0.001*Y ; REPEAT KUB; RE:=RE+1.00003 ; IM:=IM+1.01828201638 ; if RE*RE > 50 then break; if IM*IM > 50 then break; V:=V+1 ; UNTIL V>40 ; if ( ABS(RE) > 10 ) or ( ABS(IM) > 1000)
then
begin PUTPIXEL((X+320),(Y+240),TRUNC(V)) ;
end else PUTPIXEL((X+320),(Y+240),0); Y:=Y+1 ; UNTIL Y > 241 ; X:=X+1 ; UNTIL X>320 ; End;
Лабораторная работа №23.
Тема Использование диалоговых окон.
Практическая работа Графика
Для рисования статичных рисунков используется компонент Image(панельAdditional),Button(Standard). Этот компонент размещается на форме в виде прозрачного пунктирного квадрата, и в его пределах можно рисовать.
procedure TForm1.Button1Click(Sender: TObject);
begin
with Form1.Canvas do begin
Pen.Color:=clBlack;
Pen.Width:=3;
Brush.Style:=bsSolid;
Brush.Color:=clMaroon;
polygon([Point(250,150),Point(110,250),Point(390,250)]);
pen.Color:=clBlack;
Brush.Style:=bsSolid;
Brush.Color:=clyellow;
rectangle(110,250,390,420); {рисует дом }
brush.color:=clWhite;
rectangle(150,280,250,350); {рисует окно }
moveto(200,280);
lineTo(200,350); {рисует линию вертикально }
moveto(150,315);
lineTo(250,315); {рисует линию горизонтально }
Brush.Color:=clWhite;
rectangle(300,300,360,410); {рисует дверь }
moveto(350,350);
lineTo(350,360); {рисует ручку двери }
end;
end;
end.
Задание1.
Лабораторная работа №24.
Тема Использование операторов обработки исключений.
Практическая работа Построение графика
Описание плана разработки программы
Открыть новый проект.
Разместить на форме экземпляры компонентов: кнопка Button, область рисованияPaintBox.
Выполнить следующие действия:
Выделенный объект |
Вкладка окна ObjectInspector |
Имя свойства/ имя события |
Действие |
Form1 |
Properties |
Caption |
Установка имени формы «График функции» |
Button1
|
Properties |
Caption |
Введите название «График» |
Events |
Onclick |
Написать процедуру, рисующую график по точкам | |
PaintBox1 |
Properties |
Canvas |
Соединение линиями получаемых точек |
Button2
|
Properties |
Caption |
Введите название «Выход» |
Events |
Onclick |
Close; |
Сохраните проект, запустите и протестируйте его.
Листинг программы
procedureTForm1.Button1Click(Sender: Tobject);
functionf(x:integer):integer;
varc:integer;
begin
c:=round(10*sin(0.1*x));
f:=c;
end;
varx:integer;
begin
PaintBox1.Canvas.LineTo(0,150);
PaintBox1.Canvas.LineTo(410,150);
x:=0;
for x:=0 to 350 do
begin
PaintBox1.Canvas.LineTo(x, f(x)+150);
end;
end;
procedureTform1.Button2Click(Sender: Tobject);
begin
Close;
end;
end.
Лабораторная работа №25.
Тема Создание главного и контекстного меню.
Практическая работа «Градусник»
Поместите на форму два поля ввода Edit и четыре кнопки.
Ввести число в левое поле. По нажатию на кнопку «по Фаренгейту» в правом поле выводится преобразованное число. По нажатию кнопки «Очистить» очищаются поля ввода.
Ограничьте вводимые температуры диапазоном от 0°C до 100°C (если введено значение, превышающее 100°C или 212°F, то при нажатии кнопки в полях ввода должно отобразиться 100 и 212 соответственно).
Отобразить столбик термометра графически. Добавьте компоненты Image.
Сделать видимой только ту кнопку, которая необходима для преобразования.
Листинг программы
procedure TForm1.FormCreate(Sender: TObject);
begin
Edit1.Text := '';
Edit2.Text := '';
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Rectangle(10,1,23,360);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Rectangle(10,1,23,360);
end;
procedureTForm1.Button2Click(Sender: TObject);
vara, b, c : real;
begin
a := StrToFloat(Edit1.Text);
if (a > 0) or (a < 100) then b := 1.8 * a + 32;
if a > 100 then b := 212;
if a < 0 then b := 32;
Edit2.Text := FloatToStr(b);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Rectangle(10,1,23,360);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.Rectangle(10,round(360-a),23,360);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Rectangle(10,1,23,360);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clBlue;
Image2.Canvas.Rectangle(10,round(360-b),23,360);
end;
procedureTForm1.Button1Click(Sender: TObject);
vara, c, d : real;
begin
c := StrToFloat(Edit2.Text);
if (c > 32) or (c < 212) then d := ( c - 32)/1.8;
if c < 32 then d := 0;
if c > 212 then d := 100;
Edit1.Text := FloatToStr(d);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Rectangle(10,1,23,360);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clBlue;
Image2.Canvas.Rectangle(10,round(360-c),23,360);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Rectangle(10,1,23,360);
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clRed;
Image1.Canvas.Rectangle(10,round(360-d),23,360);
end;
procedureTForm1.Button3Click(Sender: TObject);
begin
Edit1.Text := '';
Edit2.Text := '';
Image1.Canvas.Pen.Color := clRed;
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.Rectangle(10,1,23,360);
Image2.Canvas.Pen.Color := clBlue;
Image2.Canvas.Brush.Color := clWhite;
Image2.Canvas.Rectangle(10,1,23,360);
end;
procedureTForm1.Button4Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.Edit1Enter(Sender: TObject);
begin
Button2.Visible := true;
Button1.Visible := False;
end;
procedureTForm1.Edit2Enter(Sender: TObject);
begin
Button1.Visible := True;
Button2.Visible := False;
end;
end.
Лабораторная работа №26.
Тема Создание текстового файла, ввод и вывод данных.
Цель работы - создать программу, в которой на поверхности окна перемещается случайным образом изображение веселой рожицы. Пользователь должен сделать щелчок кнопкой мыши по изображению. Программа должна завершить работу после того, как пользователь сделает 10 щелчков кнопкой мыши.
Начало игры осуществляется по нажатию на кнопку Ok.
Свойство WordWrapкомпонентаLabel– признак того, что слова, которые не помещаются в текущей строке, автоматически переносятся на следующую строку (значение свойстваAutoSizeдолжно бытьFalse).
Листинг программы:
var
Form1:TForm1;
fx,fy:integer; { координаты рожицы}
n: integer; { количество щелчков кнопкой мыши}
p: integer; { количество попаданий}