Учебный курс Программирование на 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.
 
*'''Форма с резултатом работы программы'''
 
*'''Форма с резултатом работы программы'''
[[Изображение:Форма-к.jpg]]
+
 
 +
== Задания ==
 +
Таблица 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 (карандаш)

Таблица 10.1. Свойства объекта mpen (карандаш)
Свойство Определяет
Color
Цвет линии.
Width
Толщину линии.
Style
Вид линии.
Mode
Режим отображения.
Работа с графикой

Пример 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.
  • Форма с резултатом работы программы:
Форма-с.JPG

Пример 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.
  • Форма с резултатом работы программы:


Форма-г.JPG

Пример 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

Номер варианта Условие
1
В треугольной пирамиде построить сечение, параллельное основанию.
2
В треугольной пирамиде построить сечение, проходящее через одну из сторон основания и середину противоположного ребра.
3
В треугольной пирамиде построить сечение, проходящее через боковое ребро и медиану основания.
4
В треугольной пирамиде построить сечение, проходящее через сторону основания и наклоненное к основанию под углом 30 градусов
5
В правильной четырехугольной пирамиде провести сечение, параллельное основанию и проходящее через середину бокового ребра.
6
В правильной четырехугольной пирамиде провести сечение, проходящее через диагональ основания и наклоненное к плоскости основания под углом 30 градусов
7
В правильной четырехугольной пирамиде провести сечение, проходящее через одну из сторон основания и середину высоты.
8
В прямоугольном параллелепипеде провести диагональное сечение.
9
В прямоугольном параллелепипеде провести сечение, проходящее через сторону нижнего основания и противоположную сторону верхнего основания.
10
В прямоугольном параллелепипеде построить сечение, проходящее через одну из сторон нижнего основания и одну из вершин верхнего основания.
11
В правильной четырехугольной пирамиде провести сечение, проходящее через вершину пирамиды и перпендикулярное плоскости основания.
12
В правильной шестиугольной пирамиде построить сечение, проходящее через вершину и большую диагональ основания.
13
В треугольной пирамиде построить сечение, проходящее через среднюю линию боковой грани и противоположную вершину основания.
14
В прямой четырехугольной призме провести сечение, проходящее через диагональ нижнего основания и одну из вершин верхнего основания.

Литература

  1. Архангельский. Программирование на Delphi 6. – М: БИНОМ, 2002
  2. Бобровский С. Delphi 7. Учебный курс. – СПб: Питер, 2003
  3. Культин Н. Основы программирования в Delphi 7. СПб: БХВ-Петербург, 2005.


Ссылки

Учебный курс Программирование на Delphi

Учебный план курса Программирование на Delphi