Пример 16.1.

Создать программу рисования в форме графического примитива  с заливкой. Примитив – пятиугольная звезда, рисуется при нажатии кнопки мыши (событие onDown) на форме. Если  нажата левая кнопка мыши, то цвет линий clBlack (черный), стиль заливки bsDiagCross (диагональный крест), цвет заливки – clRed (красный). Если нажата правая кнопка мыши, то цвет линий clRed (красный), стиль заливки bsCross ( крест), цвет заливки clBlue (синий).

Листинг модуля формы

unit Prg_16_1_;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs;

type

{ TForm1 }

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

{ TForm1 }

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

with Form1 do

begin

if Button = mbLeft    // нажата левая кнопка?

then

begin

Canvas.Pen.Color := clBlack;

StarLine(x, y, 30,Canvas);

Canvas.Brush.Style:=bsDiagCross;

Canvas.Brush.Color:=clRed;

Canvas.FloodFill(x,y,Canvas.Pen.Color, fsBorder);

end

else

begin

Canvas.Pen.Color := clRed;

StarLine(x, y, 30,Canvas);

Canvas.Brush.Style:=bsCross;

Canvas.Brush.Color:=clBlue;

Canvas.FloodFill(x,y,Canvas.Pen.Color, fsBorder);

end;

end;

end;

initialization

{$I prg_16_1_.lrs}

end.

Приложение задачи 1 при исполнении.

paskal88

Twitter SEO Community Ваау! News2.ru Chipp Korica SMI2 Google Bookmarks Digg I.ua Закладки Yandex Linkstore Myscoop Communizm Ru-marks Webmarks Ruspace Linkomatic Kli.kz Web-zakladka Zakladok.net Reddit delicious Ma.gnolia Technorati Slashdot Yahoo My Web БобрДобр.ru Memori.ru rucity.com МоёМесто.ru Mister Wong



Copyright © 2009-2010 Программирование на паскале.