Учебный курс Программирование на Delphi. Модуль 15: различия между версиями
Материал из Wiki Mininuniver
Перейти к навигацииПерейти к поиску(не показано 14 промежуточных версий 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 квадратов с разным тиром заливки | ||
*'''Код программы:''' | *'''Код программы:''' | ||
Строка 56: | Строка 74: | ||
y:=y+h+30; | y:=y+h+30; | ||
end;end; | end;end; | ||
+ | end. | ||
+ | *'''Форма с резултатом работы программы:''' | ||
+ | |||
+ | <center>[[Изображение:Форма-с.JPG|400px]]</center> | ||
+ | |||
+ | ==Пример 2== | ||
+ | *'''Условие:''' | ||
+ | Построить график функции sin(x)*Exp<sup>x/5</sup> | ||
+ | *'''Код программы:''' | ||
+ | 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. | ||
+ | *'''Форма с резултатом работы программы:''' | ||
+ | |||
+ | |||
+ | <center>[[Изображение:Форма-г.JPG|400px]]</center> | ||
+ | |||
+ | ==Пример 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. | 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.