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);
...........
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);
...........