Консультация № 199857
13.12.2020, 05:34
0.00 руб.
0 6 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: У меня есть программа, которая рисует круг и мне с его помощью нужно нарисовать пятиконечную звезду(это пятиугольник, в котором соединены внутренние точки) с бликом(просто в середине звезды должен быть маленький круг)? Как это написать?

Приложение:
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, Math;

type
TForm1 = class(TForm)
Panel1: TPanel;
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Button2: TButton;
ColorDialog1: TColorDialog;
//procedure FormPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

TMyCanvas=class(TCanvas)
procedure Circle(Rad,X,Y:integer);
procedure Square(Size,X,Y:integer);
end;
var
Form1: TForm1;
ColorRomb: TColor;

implementation

{$R *.dfm}

{ TMyCanvas }

procedure TMyCanvas.Circle(Rad, X, Y: integer);
begin
Ellipse(X-Rad,Y-Rad,X+Rad,Y+Rad);
end;

procedure TMyCanvas.Square(Size, X, Y: integer);
begin
Rectangle(X,Y,X+Size,Y-Size);
end;

{procedure TForm1.FormPaint(Sender: TObject);
var MC:TMyCanvas;
begin
MC:=TMyCanvas.Create;
MC.Handle:=Form1.Canvas.Handle;
MC.Circle(50,200,100);
MC.Square(50,100,100);
MC.Pen.Width:=3;
MC.Pen.Color:=clRed;
MC.MoveTo(10,10);
MC.LineTo(200,10);
MC.Free;
end;}

procedure TForm1.Button1Click(Sender: TObject);
var rl:TRect;
rad:integer;
x1,y1:integer;
lx,ly:integer;
xs,ys:integer;

begin
Canvas.Brush.Color:=Form1.Color;
Canvas.FillRect(Canvas.ClipRect);
if (Trim(edit1.Text)='') or (Trim(edit2.Text)='') or (Trim(edit3.Text)='') then
begin
ShowMessage('Введите данные!');
Exit;
end;

x1:=StrToInt(edit1.Text);
y1:=StrToInt(edit2.Text);
rad:=StrToInt(edit3.Text);

Canvas.Pen.Color:=ColorRomb;
if (x1>=ClientWidth) or (y1>=ClientHeight) or ((ClientWidth-x1)<lx) then
begin
ShowMessage('Введите корректные данные');
edit1.SetFocus;
exit;
end;

Canvas.Ellipse(x1-rad,y1-rad, x1+rad, y1+rad); //Чертит круг

xs:=lx div 2;
ys:=ly div 2;

{Canvas.LineTo(x1+rad+trunc(rad*(sin(36*pi/180))),y1+rad);
Canvas.MoveTo(x1,y1);
Canvas.LineTo(x1,y1+trunc(rad*cos(72*pi/360)));
Canvas.LineTo(x1+xs,y1-trunc(rad*sin(72*pi/360)));
Canvas.LineTo(x1+lx,y1-trunc(rad*sin(72*pi/360)));
Canvas.LineTo(x1+xs,y1+trunc(rad*cos(72*pi/360)));
Canvas.LineTo(x1,y1+trunc(rad*cos(72*pi/360)));}


Canvas.Brush.Color:=ColorRomb;
Canvas.FloodFill(x1+xs,y1-ys,clGreen,fsBorder);
end;


procedure TForm1.Button2Click(Sender: TObject);
begin
if ColorDialog1.Execute then
begin
ColorRomb:=ColorDialog1.Color;
Button1.Click;
end;
end;

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if (Key in ['0'..'9',#8]=false) then Key:=#0;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ColorRomb:=clGreen;
end;

end.

Обсуждение

давно
Профессор
401888
1232
13.12.2020, 06:19
общий
это ответ
Здравствуйте, QWERUIO!
Пример рисования пятиконечной звезды.
Код:
procedure TForm1.FormPaint(Sender: TObject);
var p:array[1..12] of TPoint;
cx,cy,r,i:integer;
u:double;
begin
cx:=ClientWidth div 2;
cy:=ClientHeight div 2;
r:=cy-50;
//вычисляем координаты вершин звезды
u:=pi/10; // от правого гор. луча
for i:=1 to 12 do
begin
if (i mod 2=0) then
begin // впадина
p[i].x:=cx+round(r*0.38*cos(u));
p[i].y:=cy-round(r*0.38*sin(u));
end
else
begin // луч
p[i].x:=cx+round(r*cos (u));
p[i].y:=cy-round(r*sin(u));
end;
u:=u+pi/5;
end;
Canvas.Pen.Color:=clRed;
Canvas.Brush.Color:=clRed;
Canvas.Polygon(p);
end;
5
Большое спасибо!
давно
Посетитель
404602
7
13.12.2020, 08:35
общий
упс, а как в серединке сделать блик?
давно
Профессор
401888
1232
13.12.2020, 08:38
общий
Адресаты:
Извините, я не представляю что вам нужно.
давно
Посетитель
404602
7
13.12.2020, 09:01
общий
блик - это белый кружок на окружности, он должен быть привязан к центу звезды(к центру окружности). не могу связать из вместе...
давно
Посетитель
404602
7
13.12.2020, 09:44
общий
пардон, блик - это НЕЗАКРАШЕННЫЙ кружок
давно
Профессор
401888
1232
13.12.2020, 12:42
общий
13.12.2020, 12:43
Адресаты:
А Вы напишите точное и полное условие задачи, как в оригинале.
Форма ответа