Пример 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 при исполнении.