Информатика, вопрос задал merry1647 , 1 год назад

LAZARUS Інформатика

створіть проект у якому потрібно сформувати табличну величину з 5 дійсних чисел, що знаходяться в рядках багаторядкового текстового поля, та зобразити кожне число кругом відповідного радіуса, використовуючи властивість canvas

Будь-ласка, надішліть код до проекту!!

Ответы на вопрос

Ответил sovai81
3

Ответ:

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.

Объяснение:

хотів пояснити ще, але подумав, що це складно пояснювати

Ответил archie242
1

Відповідь:

!! Важливо пам'ятати - перед запуском цього коду, необхідно додати компоненти 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;

Новые вопросы