LAZARUS Інформатика
створіть проект у якому потрібно сформувати табличну величину з 5 дійсних чисел, що знаходяться в рядках багаторядкового текстового поля, та зобразити кожне число кругом відповідного радіуса, використовуючи властивість canvas
Будь-ласка, надішліть код до проекту!!
Answers & Comments
Ответ:
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls, ExtCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
Memo1: TMemo;
Panel1: TPanel;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
procedure TForm1.FormCreate(Sender: TObject);
begin
Memo1.Text := '1.5'#13#10'2.0'#13#10'3.2'#13#10'4.1'#13#10'5.5';
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
x, y: integer;
r: integer;
begin
// Clear canvas
Panel1.Canvas.Brush.Color := clWhite;
Panel1.Canvas.FillRect(0, 0, Panel1.Width, Panel1.Height);
// Split text into lines
Memo1.Lines.BeginUpdate;
try
for i := 0 to Memo1.Lines.Count - 1 do
begin
// Convert line to float
try
r := Round(StrToFloat(Memo1.Lines[i]) * 10);
except
on EConvertError do
Continue;
end;
// Calculate circle position and draw it
x := 50 + i * 50;
y := 50;
Panel1.Canvas.Brush.Color := clRed;
Panel1.Canvas.Ellipse(x - r, y - r, x + r, y + r);
// Draw label
Panel1.Canvas.Brush.Style := bsClear;
Panel1.Canvas.TextOut(x - r, y + r, Memo1.Lines[i]);
end;
finally
Memo1.Lines.EndUpdate;
end;
end;
end.
Объяснение:
хотів пояснити ще, але подумав, що це складно пояснювати
Відповідь:
!! Важливо пам'ятати - перед запуском цього коду, необхідно додати компоненти TForm, TMemo та TImage на форму та правильно налаштувати їх !!
procedure TForm1.Button1Click(Sender: TObject);
var
i, rowcount: Integer;
nums: array[0..4] of Double;
begin
// зчитуємо числа з багаторядкового текстового поля
rowcount := Memo1.Lines.Count;
if rowcount < 5 then
begin
ShowMessage('Додайте ще ' + IntToStr(5 - rowcount) + ' чисел в багаторядкове текстове поле!');
Exit;
end;
for i := 0 to 4 do
begin
nums[i] := StrToFloatDef(Memo1.Lines[i], 0);
end;
// відображення чисел в колах
Image1.Canvas.Brush.Color := clWhite;
Image1.Canvas.FillRect(Rect(0, 0, Image1.Width, Image1.Height));
Image1.Canvas.Pen.Width := 2;
Image1.Canvas.Pen.Color := clBlack;
for i := 0 to 4 do
begin
Image1.Canvas.Brush.Color := RGB(Random(256), Random(256), Random(256));
Image1.Canvas.Ellipse(Round(50 + i * 60 - nums[i]), 50 - Round(nums[i]), Round(50 + i * 60 + nums[i]), 50 + Round(nums[i]));
Image1.Canvas.TextOut(40 + i * 60, 60 + Round(nums[i]), FloatToStr(nums[i]));
end;
end;