ОА "Микротехника"

Создание класса объекта

unit targett;
interface
uses FMX.Objects,FMX.StdCtrls,FMX.Layouts, System.Math;

type
TTarget = class
Target:TCircle; // FMX.Objects
name:TLabel; // FMX.StdCtrls
// label_azimuth:TLabel;
// line_azimuth:TLine; // азимутальный курсор
frequency, dlit, period,amplituda:Double;
time1:TDateTime;
sob:Integer;
k_ugol:Double;

constructor Create(freq,sum_ampl, azimuth:double; container:TLayout); // FMX.Layouts
destructor Destroy;

procedure TargetOnMouseEnter(Sender: TObject);
procedure TargetOnMouseLeave(Sender: TObject);
procedure TargetOnDblClick(Sender: TObject);
procedure TargetHdt();


end;

implementation

uses
System.UITypes, FMX.Graphics, FMX.Types, System.SysUtils,Unit5,unit1,antens;

constructor TTarget.Create(freq, sum_ampl, azimuth: double; container: TLayout);
var ampl:Double;
begin
ampl:=sum_ampl*(container.Width/256000)*koef; // суммарная ампл. 4х каналов (max 4*32000=128000) width/2/128000 = width/256000
with Self do begin
Target:=TCircle.Create(container);
Target.Parent:=container;
Target.Width:=9;
Target.Height:=9;
Target.Position.X:=(container.Width/2+ampl*sin(DegToRad(azimuth)))-Target.Width/2;
Target.Position.Y:=(container.Height/2-ampl*cos(DegToRad(azimuth)))-Target.Height/2;
if freq<8800 then
Target.Fill.Color:=Talphacolors.Chartreuse
else Target.Fill.Color:=Talphacolors.Deepskyblue;
Target.Fill.Kind:=TBrushKind.Solid;
Target.OnMouseEnter:=TargetOnMouseEnter;
Target.OnMouseLeave:=TargetOnMouseLeave;
Target.OnDblClick:=TargetOnDblClick;
Target.Tag:=100;
// Target.HitTest:=True;
frequency:=freq;
time1:=Now;
sob:=0;
k_ugol:=azimuth;
amplituda:=sum_ampl;

name:=TLabel.Create(container);
name.Parent:=Target;
name.Visible:=False;
// name.TextAlign:=TTextAlign.Center;
name.Width:=60;
name.Height:=60;

name.Position.X:=-60;
name.Position.y:=-60;
name.StyledSettings:= name.StyledSettings - [TStyledSetting.FontColor];
name.TextSettings.FontColor:=Talphacolors.Red;
// name.Text:=IntToStr(CounterTarget);
// name.Text:='f-'+FloatToStr(frequency)+Chr(13)+TimeToStr(time)+Chr(13)+'соб.-'+IntToStr(Target.Tag);
name.Text:='f-'+FloatToStr(frequency);//+Chr(13)+TimeToStr(time)+Chr(13)+'соб.-'+IntToStr(Target.Tag);


end;
end;

destructor TTarget.Destroy;
begin
Target.Free;
end;



procedure TTarget.TargetHdt;
begin
name.RotationAngle:=-(Target.Parent as TLayout).RotationAngle ;

end;

procedure TTarget.TargetOnDblClick(Sender: TObject);
var
i:integer;
scog:single;
begin
scog:=Unit5.layout_face.RotationAngle;
scog:=scog+k_ugol;


if scog>=360 then scog:=scog-360;
if scog<11.25 then scog:=scog+360;
i:=0;
while (abs(scog-sect_half[i])>=11.25) do
inc(i);

Unit5.express_face.sector_math.RotationAngle:=
- Unit5.layout_face.RotationAngle+angle_s[i];


Unit5.express_face.sector_math.Visible:=true;


Unit5.select_freq:=frequency;
Unit5.select__angle:=scog; //курсовой угол
Unit5.select_iangle:=k_ugol;
Unit5.select_block:=i;

Unit5.express_face.rect_selection(amplituda,k_ugol);

info_right.Text:='Блок антен '+inttostr(i)+chr(13)+'Курсовой угол '+ floattostr(Round(scog))+'°'+
chr(13)+'Частота '+floattostr(frequency)+chr(13)+
'Ист. пеленг '+floattostr(k_ugol)+'°'+chr(13)+Timetostr(time1)+chr(13)+
'Событий-'+inttostr(sob);


///////////////////////////////Автоматическая настройка на цель///////////
Form1.Timer1.Enabled:=False;
Form1.Timer2.Enabled:=False;
Form1.Pie1.RotationAngle:=angle_s[i];
ant_array[i];
mode_ant(i);
pie(i);
Unit5.sector_arc.RotationAngle:=angle_s[i];




if frequency>3200 then begin
Form1.Radiobutton2.IsChecked:=True;
Form1.RadioButton2Click(self);
Form1.TrackBar5.Value:=(frequency-8800)/5;
end
else begin
Form1.Radiobutton1.IsChecked:=True;
Form1.RadioButton1Click(self);
Form1.TrackBar5.Value:=(frequency-2880)/2;
end;

end;

procedure TTarget.TargetOnMouseEnter(Sender: TObject);
var
// angle_s: array[0..7] of Double = (270, 315, 0, 45, 90, 135, 180, 225);
i:integer;
scog:single;
begin

name.Visible:=True;
Unit5.express_face.azimut_angle(k_ugol+180);
Unit5.express_face.line_azimuth.Visible:=True;
Unit5.express_face.line_nord.Visible:=True;
Unit5.express_face.label_angle(k_ugol);
Unit5.express_face.label_azimuth.Visible:=True;
Unit5.express_face.ampl_round.Visible:=True;
Unit5.express_face.round_ampl(amplituda);


scog:=Unit5.layout_face.RotationAngle;
scog:=scog+k_ugol;
if scog>=360 then scog:=scog-360;
if scog<11.25 then scog:=scog+360;
i:=0;
while (abs(scog-sect_half[i])>=11.25) do
inc(i);



Unit5.express_face.sector_real.RotationAngle:=
- Unit5.layout_face.RotationAngle+angle_s[i];

Unit5.express_face.sector_real.Visible:=True;
// Form1.Label3.Text:='Блок антен '+inttostr(i)+chr(13)+'Курсовой угол '+ floattostr(Round(scog))
// +chr(13)+'Частота '+floattostr(frequency)+chr(13)+
// 'Ист. пеленг '+floattostr(k_ugol) ;

if scog>=360 then scog:=scog-360;
info_left.Text:='Блок антен '+inttostr(i)+chr(13)+'Курсовой угол '+ floattostr(Round(scog))
+chr(13)+'Частота '+floattostr(frequency)+chr(13)+
'Ист. пеленг '+floattostr(k_ugol)+'°'+chr(13)+Timetostr(time1)+chr(13)+
'Событий-'+inttostr(sob); ;


TargetHdt;
Unit5.express_face.angle_hdt;

end;

procedure TTarget.TargetOnMouseLeave(Sender: TObject);
begin
name.Visible:=False;
Unit5.express_face.line_azimuth.Visible:=false;
Unit5.express_face.label_azimuth.Visible:=false;
Unit5.express_face.ampl_round.Visible:=False;
Unit5.express_face.line_nord.Visible:=False;
// Unit1.express_face.sector_math.Visible:=false;
Unit5.express_face.sector_real.Visible:=False;


// Unit1.express_face.hdt.Visible:=False;
end;
end.

.......................................Реализация класса.......................................

var

targets:array of TTarget;


procedure TForm4.FormCreate(Sender: TObject);
begin

SetLength(targets,1);

end;

.....
targets[(Length(targets)-1)]:=TTarget.Create(freq,sum_ampl,ipel,layout_face);
...........

Delphi