Учебный курс Программирование на Delphi. Модуль 15: различия между версиями
Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску| (не показано 10 промежуточных версий 3 участников) | |||
| Строка 1: | Строка 1: | ||
| + | == '''Свойства объекта mpen (карандаш)''' == | ||
| + | |||
| + | <CENTER>'''Таблица 10.1. Свойства объекта mpen (карандаш)'''</CENTER> | ||
| + | {| border=1 | ||
| + | |- | ||
| + | !Свойство||Определяет | ||
| + | |- | ||
| + | |<center>Color</center>||Цвет линии. | ||
| + | |- | ||
| + | |<center>Width</center>||Толщину линии. | ||
| + | |- | ||
| + | |<center>Style</center>||Вид линии. | ||
| + | |- | ||
| + | |<center>Mode</center>||Режим отображения. | ||
| + | |- | ||
| + | |||
| + | |} | ||
| + | |||
<center>'''Работа с графикой'''</center> | <center>'''Работа с графикой'''</center> | ||
==Пример 1== | ==Пример 1== | ||
| − | *'''Условие | + | *'''Условие:''' |
Вывести 8 квадратов с разным тиром заливки | Вывести 8 квадратов с разным тиром заливки | ||
*'''Код программы:''' | *'''Код программы:''' | ||
| Строка 57: | Строка 75: | ||
end;end; | end;end; | ||
end. | end. | ||
| − | *'''Форма с резултатом работы программы''' | + | *'''Форма с резултатом работы программы:''' |
| − | |||
| − | <center>[[Изображение:Форма-с.JPG]]</center> | + | <center>[[Изображение:Форма-с.JPG|400px]]</center> |
==Пример 2== | ==Пример 2== | ||
| − | *'''Условие | + | *'''Условие:''' |
Построить график функции sin(x)*Exp<sup>x/5</sup> | Построить график функции sin(x)*Exp<sup>x/5</sup> | ||
*'''Код программы:''' | *'''Код программы:''' | ||
| Строка 141: | Строка 158: | ||
end; | end; | ||
end. | end. | ||
| − | *'''Форма с резултатом работы программы''' | + | *'''Форма с резултатом работы программы:''' |
| − | <center>[[Изображение:Форма-г.JPG]]</center> | + | <center>[[Изображение:Форма-г.JPG|400px]]</center> |
==Пример 3== | ==Пример 3== | ||
| − | *'''Условие | + | *'''Условие:''' |
Нарисовать звезду. События нажатия кнопки мыши: | Нарисовать звезду. События нажатия кнопки мыши: | ||
если левая цвет звезды красный | если левая цвет звезды красный | ||
если правая цвет звезды черный | если правая цвет звезды черный | ||
*'''Код программы:''' | *'''Код программы:''' | ||
| + | unit Stars_; | ||
| + | interface | ||
| + | uses | ||
| + | Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, | ||
| + | Dialogs, StdCtrls; | ||
| + | type | ||
| + | TForm1 = class(TForm) | ||
| + | procedure FormMouseDown(Sender: TObject; Button: TMouseButton; | ||
| + | Shift: TShiftState; X, Y: Integer); | ||
| + | private | ||
| + | { Private declarations } | ||
| + | public | ||
| + | { Public declarations } | ||
| + | end; | ||
| + | var | ||
| + | Form1: TForm1; | ||
| + | implementation | ||
| + | {$R *.dfm} | ||
| + | procedure StarLine(x0,y0,r: integer; Canvas: TCanvas); | ||
| + | // x0,y0 - координаты центра звезды | ||
| + | // r - радиус звезды | ||
| + | var | ||
| + | p : array[1..11] of TPoint; // массив координат лучей и впадин | ||
| + | a: integer; // угол между осью ОХ и прямой, соединяющей | ||
| + | // центр звезды и конец луча или впадину | ||
| + | i: integer; | ||
| + | begin | ||
| + | a := 18; // строим от правого гор. луча | ||
| + | for i:=1 to 10 do | ||
| + | begin | ||
| + | if (i mod 2 = 0) then | ||
| + | begin // впадина | ||
| + | p[i].x := x0+Round(r/2*cos(a*2*pi/360)); | ||
| + | p[i].y:=y0-Round(r/2*sin(a*2*pi/360)); | ||
| + | end | ||
| + | else | ||
| + | begin // луч | ||
| + | p[i].x:=x0+Round(r*cos(a*2*pi/360)); | ||
| + | p[i].y:=y0-Round(r*sin(a*2*pi/360)); | ||
| + | end; | ||
| + | a := a+36; | ||
| + | end; | ||
| + | p[11].X := p[1].X; // чтобы замкнуть контур звезды | ||
| + | p[11].Y := p[1].Y; | ||
| + | Canvas.Polyline(p); // начертить звезду | ||
| + | end; | ||
| + | // нажатие кнопки мыши | ||
| + | procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton; | ||
| + | Shift: TShiftState; X, Y: Integer); | ||
| + | begin | ||
| + | if Button = mbLeft // нажата левая кнопка? | ||
| + | then Form1.Canvas.Pen.Color := clBlack | ||
| + | else Form1.Canvas.Pen.Color := clRed; | ||
| + | StarLine(x, y, 30,Form1.Canvas); | ||
| + | end; | ||
| + | end. | ||
| + | *'''Форма с резултатом работы программы''' | ||
| + | |||
| + | == Задания == | ||
| + | Таблица 22 | ||
| + | |||
| + | {| border=1 | ||
| + | !Номер варианта||Условие|| | ||
| + | |- | ||
| + | |<center>1</center>||В треугольной пирамиде построить сечение, параллельное основанию.|| | ||
| + | |- | ||
| + | |||
| + | |<center>2</center>||В треугольной пирамиде построить сечение, проходящее через одну из сторон основания и середину противоположного ребра.|| | ||
| + | |- | ||
| + | |<center>3</center>||В треугольной пирамиде построить сечение, проходящее через боковое ребро и медиану основания.|| | ||
| + | |- | ||
| + | |<center>4</center>||В треугольной пирамиде построить сечение, проходящее через сторону основания и наклоненное к основанию под углом 30 градусов|| | ||
| + | |- | ||
| + | |<center>5</center>||В правильной четырехугольной пирамиде провести сечение, параллельное основанию и проходящее через середину бокового ребра.|| | ||
| + | |- | ||
| + | |<center>6</center>||В правильной четырехугольной пирамиде провести сечение, проходящее через диагональ основания и наклоненное к плоскости основания под углом 30 градусов|| | ||
| + | |- | ||
| + | |<center>7</center>||В правильной четырехугольной пирамиде провести сечение, проходящее через одну из сторон основания и середину высоты.|| | ||
| + | |- | ||
| + | |<center>8</center>||В прямоугольном параллелепипеде провести диагональное сечение.|| | ||
| + | |- | ||
| + | |<center>9</center>||В прямоугольном параллелепипеде провести сечение, проходящее через сторону нижнего основания и противоположную сторону верхнего основания.|| | ||
| + | |- | ||
| + | |<center>10</center>||В прямоугольном параллелепипеде построить сечение, проходящее через одну из сторон нижнего основания и одну из вершин верхнего основания.|| | ||
| + | |- | ||
| + | |<center>11</center>||В правильной четырехугольной пирамиде провести сечение, проходящее через вершину пирамиды и перпендикулярное плоскости основания.|| | ||
| + | |- | ||
| + | |<center>12</center>||В правильной шестиугольной пирамиде построить сечение, проходящее через вершину и большую диагональ основания.|| | ||
| + | |- | ||
| + | |<center>13</center>||В треугольной пирамиде построить сечение, проходящее через среднюю линию боковой грани и противоположную вершину основания.|| | ||
| + | |- | ||
| + | |<center>14</center>||В прямой четырехугольной призме провести сечение, проходящее через диагональ нижнего основания и одну из вершин верхнего основания.|| | ||
| + | |- | ||
| + | |||
| + | |} | ||
| + | |||
| + | ==Литература== | ||
| + | |||
| + | #Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002 | ||
| + | #Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003 | ||
| + | #Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005. | ||
| + | |||
| + | |||
| + | ==Ссылки== | ||
| + | |||
| + | [[Учебный курс Программирование на Delphi]] | ||
| + | |||
| + | [[Учебный план курса Программирование на Delphi]] | ||
| + | |||
| + | |||
| + | [[Категория: Учебный курс Программирование на Delphi]] | ||
Текущая версия на 11:14, 20 мая 2008
Содержание
Свойства объекта mpen (карандаш)
| Свойство | Определяет |
|---|---|
| Цвет линии. | |
| Толщину линии. | |
| Вид линии. | |
| Режим отображения. |
Пример 1
- Условие:
Вывести 8 квадратов с разным тиром заливки
- Код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormPaint(Sender: TObject);
const
bsname :array[1..8] of string=('bssolid','bsclear','bshorizontal','bsvertical',
'bsfdiagonal','bsbdiagonale','bscross','bsdiagcross');
var
x,y:integer;
w,h:integer;
bs:tbrushstyle;
k:integer;
i,j:integer;
begin
w:=50;h:=50;
y:=20;
for i:=1 to 2 do begin
x:=10;
for j:=1 to 4 do begin
k:=j+(i-1)*4;
case k of
1: bs:=bssolid;
2: bs:=bsclear;
3: bs:=bshorizontal;
4: bs:=bsvertical;
5: bs:=bsfdiagonal;
6: bs:=bsbdiagonal;
7: bs:=bscross;
8: bs:=bsdiagcross;
end;
canvas.Brush.Color:=clred;
canvas.Brush.Style:=bs;
canvas.Rectangle(x,y,x+w,y+h);
canvas.TextOut(x,y-15,bsname[k]);
x:=x+w+30;
end;
y:=y+h+30;
end;end;
end.
- Форма с резултатом работы программы:
Пример 2
- Условие:
Построить график функции sin(x)*Expx/5
- Код программы:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormPaint(Sender: TObject);
procedure FormResize(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function f(x:real):real;
begin
f:=2*sin(x)*exp(x/5);
end;
procedure gr;
var
x1,x2:real;
y1,y2:real;
x:real;
y:real;
dx:real;
l,b:integer;
w,h:integer;
mx,my:real;
x0,y0:integer;
begin
l:=10;
b:=Form1.clientheight-20;
h:=Form1.clientheight-40;
w:=Form1.clientwidth-40;
x1:=0; x2:=25; dx:=0.0001;
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));
mx:=w/(abs(x2-x1));
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
gr;
end;
procedure TForm1.FormResize(Sender: TObject);
begin
form1.Canvas.FillRect(rect(0,0,clientwidth,clientheight));
gr;
end;
end.
- Форма с резултатом работы программы:
Пример 3
- Условие:
Нарисовать звезду. События нажатия кнопки мыши: если левая цвет звезды красный если правая цвет звезды черный
- Код программы:
unit Stars_;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
procedure FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure StarLine(x0,y0,r: integer; Canvas: TCanvas);
// x0,y0 - координаты центра звезды
// r - радиус звезды
var
p : array[1..11] of TPoint; // массив координат лучей и впадин
a: integer; // угол между осью ОХ и прямой, соединяющей
// центр звезды и конец луча или впадину
i: integer;
begin
a := 18; // строим от правого гор. луча
for i:=1 to 10 do
begin
if (i mod 2 = 0) then
begin // впадина
p[i].x := x0+Round(r/2*cos(a*2*pi/360));
p[i].y:=y0-Round(r/2*sin(a*2*pi/360));
end
else
begin // луч
p[i].x:=x0+Round(r*cos(a*2*pi/360));
p[i].y:=y0-Round(r*sin(a*2*pi/360));
end;
a := a+36;
end;
p[11].X := p[1].X; // чтобы замкнуть контур звезды
p[11].Y := p[1].Y;
Canvas.Polyline(p); // начертить звезду
end;
// нажатие кнопки мыши
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft // нажата левая кнопка?
then Form1.Canvas.Pen.Color := clBlack
else Form1.Canvas.Pen.Color := clRed;
StarLine(x, y, 30,Form1.Canvas);
end;
end.
- Форма с резултатом работы программы
Задания
Таблица 22
| Номер варианта | Условие | |
|---|---|---|
| В треугольной пирамиде построить сечение, параллельное основанию. | ||
| В треугольной пирамиде построить сечение, проходящее через одну из сторон основания и середину противоположного ребра. | ||
| В треугольной пирамиде построить сечение, проходящее через боковое ребро и медиану основания. | ||
| В треугольной пирамиде построить сечение, проходящее через сторону основания и наклоненное к основанию под углом 30 градусов | ||
| В правильной четырехугольной пирамиде провести сечение, параллельное основанию и проходящее через середину бокового ребра. | ||
| В правильной четырехугольной пирамиде провести сечение, проходящее через диагональ основания и наклоненное к плоскости основания под углом 30 градусов | ||
| В правильной четырехугольной пирамиде провести сечение, проходящее через одну из сторон основания и середину высоты. | ||
| В прямоугольном параллелепипеде провести диагональное сечение. | ||
| В прямоугольном параллелепипеде провести сечение, проходящее через сторону нижнего основания и противоположную сторону верхнего основания. | ||
| В прямоугольном параллелепипеде построить сечение, проходящее через одну из сторон нижнего основания и одну из вершин верхнего основания. | ||
| В правильной четырехугольной пирамиде провести сечение, проходящее через вершину пирамиды и перпендикулярное плоскости основания. | ||
| В правильной шестиугольной пирамиде построить сечение, проходящее через вершину и большую диагональ основания. | ||
| В треугольной пирамиде построить сечение, проходящее через среднюю линию боковой грани и противоположную вершину основания. | ||
| В прямой четырехугольной призме провести сечение, проходящее через диагональ нижнего основания и одну из вершин верхнего основания. |
Литература
- Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
- Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
- Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.