Консультация № 199167
13.09.2020, 00:23
0.00 руб.
14.09.2020, 11:14
0 37 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

В общем есть программа, выполнял по методичке, все работает, но остались два нерешенных вопроса:
1) Как добавить в программу код запрещающий вводить в компонент EditRad любую нечисловую информацию и организовать проверку, которая будет позволять вводить только такие значения радиуса вращения, при которых точка не будет выходить за границы области отображения;
2) Дополнить имеющуюся программу возможностью регулирования ''плавности'' вращения, то есть изменения значения переменной StepPoint по аналогу с регулированием скорости вращения. Добавить компонент TrackBar, со значениями от 1 до 20. При перемещении ползунка необходимо изменять значение переменной StepPoint и пересчитывать скорость вращения.

Код программы, которая у меня есть:
[code lang=pascal]implementation
var
RadCircle:integer;
CenterX, CenterY:integer;
PointX, PointY:integer;
Angle:real;
RadPoint:integer;
StepPoint:real;
PointColor:TColor;

{$R *.dfm}

procedure TForm1.ButtonMoveClick(Sender: TObject);
begin
if Timer1.Enabled then
begin
ButtonMove.Caption:=' Запустить';
LEditRad.Enabled:= true;
end
else
begin
RadCircle:= StrToInt(LEditRad.Text);
LEditRad.Enabled:= false;
ButtonMove.Caption:=' Остановить';
end;
Timer1.Enabled:= not Timer1.Enabled;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Angle := 0;
RadCircle := 100;
RadPoint := 5;
StepPoint := 1;
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
PointX := CenterX + RadCircle;
PointY := CenterY;
PointColor := clRed;
Canvas.Pen.Color := PointColor;
Canvas.Brush.Color := PointColor;
Canvas.Ellipse(PointX - radPoint,PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
end;

procedure TForm1.LEditRadChange(Sender: TObject);

begin
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
PointX := Trunc(RadCircle * cos(DegToRad(Angle)) + CenterX);
PointY := Trunc(RadCircle * sin(DegToRad(Angle)) + CenterY);
Canvas.Pen.Color := clred;//Form1.Color;
Canvas.Brush.Color :=clred;// Form1.Color;
Canvas.Ellipse(PointX - RadPoint, PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
Angle := Angle + StepPoint;
if Angle >= 360 then Angle := 0;

end;

procedure TForm1.TrackBarSpeedChange(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarSpeed.Position);
LabelSpeed.Caption:= IntToStr(TrackBarSpeed.Position);
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;
end[/code]

Обсуждение

давно
Посетитель
404025
131
13.09.2020, 21:51
общий
Адресаты:
За коменты извиняюсь, так как я не эксперт в этой области, прошу вас помочь с кодом...
давно
Посетитель
404025
131
13.09.2020, 22:10
общий
Адресаты:
Вы смотрели? На вас вся надежда
давно
Старший Модератор
31795
6196
14.09.2020, 10:15
общий
Адресаты:
Зипните проэкт, рар-архив не могу открыть.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
14.09.2020, 10:56
общий
Адресаты:
Давайте на облако закину?
давно
Старший Модератор
31795
6196
14.09.2020, 11:41
общий
14.09.2020, 11:41
Адресаты:
Самое простое сделать обработчик нажатия клавиш.
[code lang=pascal]procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9'])then Key:=#0;
end;[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
14.09.2020, 12:34
общий
Адресаты:
Спасибо с этим справился.
Теперь вот какой вопрос...
Прикрепленные файлы:
21f8f7bbb78192555cbac516e84d9b44.JPG
давно
Посетитель
404025
131
14.09.2020, 13:52
общий
Адресаты:
Помогите, пожалуйста. Благодарность с меня.
давно
Старший Модератор
31795
6196
14.09.2020, 15:43
общий
Адресаты:
У Вас для решения задачи есть практически всё.
Единственное, Вам нужно "Радиус окружности" переименовать в "Сторону квадрата"
Потом Сторону квадрата использовать вместо радиуса, при вычислении
PointX и PointY выходят за пределы квадрата присваивать координаты стороны квадрата.
т.е.

[code lang=pascal]if pointx>(centerx+halfsize)then pointx:=centerx+halfsize;[/code]
Аналогично для всех сторон квадрата.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
15.09.2020, 08:56
общий
Адресаты:
Можно полностью код, если вам не затруднит?
давно
Старший Модератор
31795
6196
15.09.2020, 11:15
общий
Адресаты:
[code lang=pascal]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, math;
type
TForm1 = class(TForm)
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormOnPaint(Sender: TObject);
private{Private declarations}
public{Public declarations}
PenColor:TColor;
Angle,centerX,centerY,halfSize,pointX,pointY,Speed:integer;
Range:real;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
centerx:=form1.Width div 2;
centery:=form1.Height div 2;
if centerX>centerY then HalfSize:=centerY-150
else HalfSize:=centerX-150;{половина стороны квадрата - берется в EDIT и делится на 2}
Range:=sqrt(2)*HalfSize;
angle:=0;{начальное положение угла}
Speed:=1;{берется с TrackBar}
end;
procedure TForm1.FormOnPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=PenColor;
Form1.Canvas.Brush.Color:=PenColor;
Form1.Canvas.Ellipse(pointX-4,pointY-4,pointX+4,pointY+4);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormOnPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.PenColor:=clRed;
Form1.FormOnPaint(Sender);
end;
end.[/code]
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
15.09.2020, 12:09
общий
Адресаты:
А код для кнопки оставляем?
давно
Посетитель
404025
131
15.09.2020, 12:09
общий
Адресаты:
Залил ваш код, у меня просто форма и ничего не происходит в ней
давно
Старший Модератор
31795
6196
15.09.2020, 12:15
общий
Адресаты:
У меня делает, сами смотрите
Прикрепленные файлы:
e86421febf85399a46d69b20f6e9011b.zip
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
15.09.2020, 12:16
общий
Адресаты:
Вы не забывайте, у Вас ХЕ и код нужно доробатывать под него.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
15.09.2020, 12:38
общий
Адресаты:
Можете сам проект зипнуть, попробую у себя запустить
давно
Старший Модератор
31795
6196
15.09.2020, 13:19
общий
Адресаты:
Событие Form1.OnPaint должно смотреть на FormOnPaint
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
15.09.2020, 13:25
общий
Адресаты:
У меня итоговый код такой получился, в чем ошибка?


Код:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
LEditRad: TLabeledEdit;
LabelDS: TLabel;
ButtonMove: TButton;
TrackBarSpeed: TTrackBar;
LabelSpeed: TLabel;
Timer1: TTimer;
procedure FormCreate(Sender: TObject);
procedure ButtonMoveClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure TrackBarSpeedChange(Sender: TObject);
procedure LEditRadKeyPress(Sender: TObject; var Key: Char);
procedure FormResize(Sender: TObject);
procedure FormPaint(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
var
RadCircle:integer;
CenterX, CenterY:integer;
PointX, PointY:integer;
Angle:real;
RadPoint:integer;
StepPoint:real;
PointColor:TColor;
PenColor:TColor;
halfSize, Speed:integer;
Range:real;


{$R *.dfm}

procedure TForm1.ButtonMoveClick(Sender: TObject);
begin
if Timer1.Enabled then
begin
ButtonMove.Caption:=' Запустить';
LEditRad.Enabled:= true;
end
else
begin
RadCircle:= StrToInt(LEditRad.Text);
LEditRad.Enabled:= false;
ButtonMove.Caption:=' Остановить';
end;
Timer1.Enabled:= not Timer1.Enabled;
PointX := Trunc(RadCircle * cos(DegToRad(Angle)) + CenterX);
PointY := Trunc(RadCircle * sin(DegToRad(Angle)) + CenterY);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
begin
centerx:=form1.Width div 2;
centery:=form1.Height div 2;
if centerX>centerY then HalfSize:=centerY-150
else HalfSize:=centerX-150;{половина стороны квадрата - берется в EDIT и делится на 2}
Range:=sqrt(2)*HalfSize;
angle:=0;{начальное положение угла}
Speed:=1;{берется с TrackBar}
end;

end;

procedure TForm1.FormPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=PenColor;
Form1.Canvas.Brush.Color:=PenColor;
Form1.Canvas.Ellipse(pointX-4,pointY-4,pointX+4,pointY+4);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;


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

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.FormPaint(Sender);
Form1.PenColor:=Form1.Color;
end;

procedure TForm1.TrackBarSpeedChange(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarSpeed.Position);
LabelSpeed.Caption:= IntToStr(TrackBarSpeed.Position);

end;

end.
давно
Старший Модератор
31795
6196
15.09.2020, 14:51
общий
Адресаты:
Цитата: Nedix
У меня итоговый код такой получился, в чем ошибка?

Вы уверены, что программирование Ваше? Вы даже скорировать не можете нормально. Комментариев не читаете.

[code lang=pascal] Form1.PenColor:=Form1.Color;
Form1.FormPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.FormPaint(Sender);
Form1.PenColor:=Form1.Color;[/code]
Form1.FormPaint(Sender); рисует точку, каким цветом оба раза Form1.Color, т.е. фоном.
Я Вам давал код:
[code lang=pascal] Form1.PenColor:=Form1.Color;
Form1.FormOnPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.PenColor:=clRed;
Form1.FormOnPaint(Sender);[/code]
Вы его скопировали правильно?

Посмотрите на рисунок:

Какие переменные для чего нужны.
Я Вам писал
Цитата: Nedix
{половина стороны квадрата - берется в EDIT и делится на 2}

Вы бездумно скопировали код
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
15.09.2020, 15:12
общий
Адресаты:
Помогите с конечным кодом, пожалуйста
давно
Посетитель
404025
131
17.09.2020, 09:36
общий
Адресаты:
Вот смотрите, полный код уже подправлял, все работает, квадрат чертится, но значения он не берет из Edit, а чертит постоянно по одному маршруту и с одной скоростью...
1) Как сделать так, чтобы квадрат чертился с теми значениями, что я указываю в Edit? Сейчас она двигается с любым значением одинаково...
2) Как сделать увеличение скорость движения в TrackBar? Сейчас как только я увеличиваю скорость, точка просто перестаёт двигаться....
Код:
[code][code]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, math, Vcl.Buttons, Vcl.StdCtrls, Vcl.ComCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Panel1: TPanel;
LEditS: TLabeledEdit;
Button1: TButton;
TrackBar1: TTrackBar;
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormOnPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure FormResize(Sender: TObject);
private{Private declarations}
public{Public declarations}
PenColor:TColor;
Angle,centerX,centerY,halfSize,pointX,pointY,Speed:integer;
Range:real;
RadCircle:integer;
StepPoint:real;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
if Timer1.Enabled then
begin
Button1.Caption := ' Запустить';
LEditS.Enabled := true;
end
else
begin
RadCircle := StrToInt(LEditS.Text);
LEditS.Enabled := false;
Button1.Caption := ' Остановить';
end;
Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
centerx:=form1.Width div 2;
centery:=form1.Height div 2;
if centerX>centerY then HalfSize:=centerY-150
else HalfSize:=centerX-150;{половина стороны квадрата - берется в EDIT и делится на 2}
Range:=sqrt(2)*HalfSize;
angle:=0;{начальное положение угла}
Speed:=1;{берется с TrackBar}
end;
procedure TForm1.FormOnPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=PenColor;
Form1.Canvas.Brush.Color:=PenColor;
Form1.Canvas.Ellipse(pointX-4,pointY-4,pointX+4,pointY+4);
end;

procedure TForm1.FormResize(Sender: TObject);
begin
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormOnPaint(Sender);
Angle:=Angle+Speed;
pointX:=CenterX+trunc(Range*cos(DegToRad(angle)));
pointY:=CenterY+trunc(Range*sin(DegToRad(angle)));
if pointX>(centerX+halfSize)then pointX:=centerX+halfSize;
if pointX<(centerX-halfSize)then pointX:=centerX-halfSize;
if pointY>(centerY+halfSize)then pointY:=centerY+halfSize;
if pointY<(centerY-halfSize)then pointY:=centerY-halfSize;
Form1.PenColor:=clRed;
Form1.FormOnPaint(Sender);
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBar1.Position);
Label1.Caption:= IntToStr(TrackBar1.Position);

end;

end.
[/code][/code]
давно
Старший Модератор
31795
6196
17.09.2020, 13:20
общий
это ответ
Здравствуйте, Nedix!

Смотрите код Delphi 6, Ваш ХЕ - за Вами:
[code lang=pascal h=400]unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, math, ComCtrls, StdCtrls;
type
TForm1 = class(TForm)
Timer1: TTimer;
Panel1: TPanel;
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
TrackBar1: TTrackBar;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormOnPaint(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure TrackBar1Change(Sender: TObject);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1Change(Sender: TObject);
private{Private declarations}
public{Public declarations}
PenColor:TColor;
Angle,Step:real;
CenterX,CenterY,
HalfSize,Radius,
PointX,PointY,Point:integer;
MaxRadius:integer;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.CenterX:=Form1.Width div 2;
Form1.CenterY:=(Form1.Height-Form1.Panel1.Height) div 2;
Form1.MaxRadius:=Min(Form1.CenterX,Form1.CenterY);
Form1.Angle:=45;
Form1.Step:=1;
Form1.Radius:=StrToInt(Form1.Edit1.Text);
Form1.HalfSize:=Trunc(Form1.Radius*cos(DegToRad(Form1.Angle)));
Form1.Point:=4;
Form1.Timer1.Interval:=Trunc(1000*Form1.Step/Form1.TrackBar1.Position);
Form1.Edit1.Enabled:=False;
Form1.Label1.Caption:='Radius:='+Form1.Edit1.Text;
Form1.Label2.Caption:='Speed:='+IntToStr(Form1.TrackBar1.Position);
Form1.TrackBar1.Enabled:=False;
end;
procedure TForm1.FormOnPaint(Sender: TObject);
begin
Form1.Canvas.Pen.Color:=Form1.PenColor;
Form1.Canvas.Brush.Color:=Form1.PenColor;
Form1.Canvas.Ellipse(Form1.PointX-Form1.Point,Form1.PointY-Form1.Point,
Form1.PointX+Form1.Point,Form1.PointY+Form1.Point);
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Form1.PenColor:=Form1.Color;
Form1.FormOnPaint(Sender);
Form1.PenColor:=clBlack;
Form1.PointX:=Form1.CenterX;
Form1.PointY:=Form1.CenterY;
Form1.OnPaint(Sender);
Form1.Angle:=Form1.Angle+Form1.Step;
Form1.PointX:=Form1.CenterX+trunc(Form1.Radius*cos(DegToRad(Form1.Angle)));
Form1.PointY:=Form1.CenterY+trunc(Form1.Radius*sin(DegToRad(Form1.Angle)));
if Form1.PointX>(Form1.CenterX+Form1.HalfSize)then
Form1.PointX:=Form1.CenterX+Form1.HalfSize;
if Form1.PointX<(Form1.CenterX-Form1.HalfSize)then
Form1.PointX:=Form1.CenterX-Form1.HalfSize;
if Form1.PointY>(Form1.CenterY+Form1.HalfSize)then
Form1.PointY:=Form1.CenterY+Form1.HalfSize;
if Form1.PointY<(Form1.CenterY-Form1.HalfSize)then
Form1.PointY:=Form1.CenterY-Form1.HalfSize;
Form1.PenColor:=clRed;
Form1.FormOnPaint(Sender);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if Form1.Timer1.Enabled then
begin
Form1.Timer1.Enabled:=False;
Form1.Button1.Caption:='Start';
Form1.Edit1.Enabled:=True;
Form1.TrackBar1.Enabled:=True;
end
else
begin
Form1.Timer1.Enabled:=True;
Form1.Button1.Caption:='Stop';
Form1.Edit1.Enabled:=False;
Form1.TrackBar1.Enabled:=False;
Form1.Label2.Caption:='Speed:='+IntToStr(Form1.TrackBar1.Position);
end;
end;
procedure TForm1.TrackBar1Change(Sender: TObject);
begin
Form1.Label2.Caption:='Speed:='+IntToStr(Form1.TrackBar1.Position);
Form1.Timer1.Interval:=Trunc(1000*Form1.Step/Form1.TrackBar1.Position);
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9',#8])then Key:=#0;
end;
procedure TForm1.Edit1Change(Sender: TObject);
begin
if length(Form1.Edit1.Text)>0then
begin
Form1.Radius:=StrToInt(Form1.Edit1.Text);
if Form1.Radius>Form1.MaxRadius then
begin
Form1.Radius:=Form1.MaxRadius;
Form1.Edit1.Text:=IntToStr(Form1.MaxRadius);
end;
Form1.Label1.Caption:='Radius:='+Form1.Edit1.Text;
Form1.HalfSize:=Trunc(Form1.Radius*Cos(DegToRad(45)));
end;
end;
end.[/code]

Создаете форму:


Система координат программы:


Работа программы:


Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Старший Модератор
31795
6196
17.09.2020, 14:34
общий
Адресаты:
Честно гооря, Вы во всех своих вопросах хотите получитьлКОД.
дайте-покажите-помогите

Я за Вас не буду получать "Диплом - спец Delphi".
Методички, которые Вам дают, имеют достаточно информации, для решения лабороторок.
Портал - консультирует -> а не отвечает=решает за Вас.

Есть вопросы: как - это сделать. => Вам подскажут.
Если решите за меня=>БУДУ тупо удалять
Запомните: форматирование, комментарии. Нет Ж=БУДУ тупо удалять
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
19.09.2020, 12:39
общий
Адресаты:
Код подошел, но почему-то 0 реакции от программы
Прикрепленные файлы:
b9b4311f063bac227ba24c8f56330c48.JPG
давно
Старший Модератор
31795
6196
19.09.2020, 15:34
общий
Адресаты:
Вы уже были замечены в "корявом" копировании., скопируте нормально. Код рабочий - других не даю.
Я Вам показал форму, которрую Вы должны были создать, вставить обработчики - Копи-Пастом. И прописать их в Объект-Менеджере:= -в нужных объектах нужных события.
Прикрепляю зип-ехе файла(но это не ХЕ код, и нормальный препод его разпознает 100%).


Дайте адрес курсов, может я быстрее Вас получу "диплом по Делфи".
Прикрепленные файлы:
c4f0ca21fcf67584d10a6f8eec09f852.zip
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
20.09.2020, 12:18
общий
Адресаты:
Все подошло, спасибо. У меня еще один маленький вопрос к вам:
Как сделать чтобы внутри этого круга была точка, которая будет не выходить за его границы?
Прикрепленные файлы:
f81db6ac4812b0c4a24ef0836c78596f.JPG
давно
Посетитель
404025
131
20.09.2020, 12:20
общий
Адресаты:
Ну то есть сама точка будет в произвольном порядке бегать по кругу, но за его пределы не выходить...
давно
Старший Модератор
31795
6196
20.09.2020, 18:45
общий
Адресаты:
Вы так и не дали адрес курсов. У меня нет сертификата по PASCAL+.

Может корка от Ваших курсов даст мне некоторый "Вес", хотя я и так полтора центрена.


У Вас есть функция GetPixel в Canvas - аналилизируя полученный цвет Вы имеете возможность поймать момент => контакта с другим цветом, кроме Form1.Color.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
404025
131
20.09.2020, 19:30
общий
Адресаты:
Это задание из института, во вложении задача, я выполняю часть первую по методичке до самостоятельной работы
Прикрепленные файлы:
4337ff1ee8fda62dbae347dc1977e8e3.pdf
давно
Посетитель
404025
131
20.09.2020, 23:40
общий
Адресаты:
Мне необходимо чтобы в круге была точка, которая двигалась в произвольном порядке, но не выходила за круг...
Вот код моей программы:
Код:
unit Unit1;

interface

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

type
TForm1 = class(TForm)
Panel1: TPanel;
LEditRad: TLabeledEdit;
LabelDS: TLabel;
ButtonMove: TButton;
TrackBarSpeed: TTrackBar;
LabelSpeed: TLabel;
Timer1: TTimer;
TrackBarPlav: TTrackBar;
Label1: TLabel;
LabelPlav: TLabel;
procedure FormCreate(Sender: TObject);
procedure ButtonMoveClick(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure TrackBarSpeedChange(Sender: TObject);
procedure LEditRadKeyPress(Sender: TObject; var Key: Char);
procedure TrackBarPlavChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation
var
RadCircle:integer;
CenterX, CenterY:integer;
PointX, PointY:integer;
Angle:real;
RadPoint:integer;
StepPoint:real;
PointColor:TColor;


{$R *.dfm}

procedure TForm1.ButtonMoveClick(Sender: TObject);
begin
if Timer1.Enabled then
begin
ButtonMove.Caption:=' Запустить';
LEditRad.Enabled:= true;
end
else
begin
RadCircle:= StrToInt(LEditRad.Text);
LEditRad.Enabled:= false;
ButtonMove.Caption:=' Остановить';
end;
Timer1.Enabled:= not Timer1.Enabled;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Angle := 0;
RadCircle := 100;
RadPoint := 5;
StepPoint := 1;
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
PointX := CenterX + RadCircle;
PointY := CenterY;
PointColor := clRed;
Canvas.Pen.Color := PointColor;
Canvas.Brush.Color := PointColor;
Canvas.Ellipse(PointX - radPoint,PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
end;

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

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
PointX := Trunc(RadCircle * cos(DegToRad(Angle)) + CenterX);
PointY := Trunc(RadCircle * sin(DegToRad(Angle)) + CenterY);
Canvas.Pen.Color := clred;//Form1.Color;
Canvas.Brush.Color :=clred;// Form1.Color;
Canvas.Ellipse(PointX - RadPoint, PointY - RadPoint,
PointX + RadPoint, PointY + RadPoint);
Angle := Angle + StepPoint;
if Angle >= 360 then Angle := 0;

end;

procedure TForm1.TrackBarPlavChange(Sender: TObject);
var
StepPoint: Integer;
begin
LabelPlav.Caption := IntToStr(TrackBarPlav.Position);
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarPlav.Position);
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;

end;

procedure TForm1.TrackBarSpeedChange(Sender: TObject);
begin
Timer1.Interval := Trunc(1000 * StepPoint / TrackBarSpeed.Position);
LabelSpeed.Caption:= IntToStr(TrackBarSpeed.Position);
CenterX := Form1.Width div 2;
CenterY := (Form1.Height - Panel1.Height) div 2;
end;

end.
давно
Старший Модератор
31795
6196
22.09.2020, 09:14
общий
Адресаты:
Мне нравится Ваша тупо-упрямое копирование, чего угодно, куда угодно.

TForm1.ButtonMoveClick
[code lang=pascal]RadCircle:= StrToInt(LEditRad.Text);[/code]

При этом обрабатываете запрет-фильтр:
TForm1.LEditRadKeyPress
[code lang=pascal]if not (Key in ['0'..'9','.',',',#8])then Key := #0;[/code]
Вы где выидели целое число с точкой или с запятой. 1234<>1234.00
Я Вам давал код без BACKSPACE=#08, да нужно было дать с BACKSPACЕ
При этом не проверяете на максимально допустимое значение радиуса.

TForm1.Timer1Timer:
Событие должно было стереть старую точку типа: Form1.Color;
Изменить Угол = Angle, пересчитать PointX PointY- вывести новую точку. У Вас это есть?

Во всем виноват Ваш препод.
Он ДОЛЖЕН был Вам обьяснить, что любое, событие на Форме(Event), что-то да означает, любой "компонет на форме" тоже имеет свои события(Event), да их не столько, как у формы, но они есть, и что-то да означают

Dephi - код живет своей жизнью, но влиять на эту "жизнь"- кодер может только с помощью обработчиков - тех самых событий, которые собирается обрабобатывать кодер.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа