Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
30.04.2019
Размер:
17.09 Кб
Скачать
unit OSUnit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, Spin, OSUnit2v2, Buttons, OSUnit3, ComCtrls;

type
TForm1 = class(TForm)
GroupBox2: TGroupBox;
GroupBox3: TGroupBox;
GroupBox4: TGroupBox;
GroupBox5: TGroupBox;
GroupBox6: TGroupBox;
GroupBox7: TGroupBox;
SignalType1: TComboBox;
Label2: TLabel;
Image1: TImage;
Image2: TImage;
Image3: TImage;
XScale1: TEdit;
YScale1: TEdit;
Label3: TLabel;
Auto1: TCheckBox;
Label4: TLabel;
Label5: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
Auto2: TCheckBox;
XScale2: TEdit;
YScale2: TEdit;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
SignalType2: TComboBox;
Label9: TLabel;
SpeedButton3: TSpeedButton;
Auto3: TCheckBox;
XScale3: TEdit;
YScale3: TEdit;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
SignalType3: TComboBox;
Label13: TLabel;
SpeedButton5: TSpeedButton;
SpeedButton6: TSpeedButton;
SpeedButton7: TSpeedButton;
GroupBox1: TGroupBox;
Image4: TImage;
SaveDialog1: TSaveDialog;
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
PointsNumber: TSpinEdit;
EnterSignalType: TComboBox;
Label15: TLabel;
Label14: TLabel;
Label1: TLabel;
Status: TMemo;
SaveButton: TButton;
Button1: TButton;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
Label16: TLabel;
TEdit: TSpinEdit;
Label17: TLabel;
T1Edit: TSpinEdit;
K1Edit: TSpinEdit;
K2Edit: TSpinEdit;
Label18: TLabel;
T2Edit: TSpinEdit;
Label19: TLabel;
Label20: TLabel;
Label21: TLabel;
Label22: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure SignalType1Change(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
procedure SpeedButton3Click(Sender: TObject);
procedure PointsNumberChange(Sender: TObject);
procedure EnterSignalTypeChange(Sender: TObject);
procedure Auto1Click(Sender: TObject);
procedure Auto2Click(Sender: TObject);
procedure Auto3Click(Sender: TObject);
procedure SpeedButton5Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
procedure SpeedButton7Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure TEditChange(Sender: TObject);
procedure T1EditChange(Sender: TObject);
procedure K1EditChange(Sender: TObject);
procedure T2EditChange(Sender: TObject);
procedure K2EditChange(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

const
XShift: integer = 5;
YShift: integer = 0;
XLeftShift: integer = 0;
YUpShift: integer = 5;
var
Form1: TForm1;
Net: TNet;
XScaleE, YScaleE: TEdit;
implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
begin
Net := TNet.Create(PointsNumber.Value);
Net.CreatePoints(0);
Net.Calculate;
InitImage(Image1);
InitImage(Image2);
InitImage(Image3);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
Net.Destroy;
end;

procedure TForm1.SignalType1Change(Sender: TObject);
var
// XScaleE, YScaleE: TEdit;
Image: TImage;
XScale, YScale: Real;
Auto: TCheckBox;
begin
if (Sender as TComboBox).Name = 'SignalType1' then
begin
Image := Image1;
XScaleE := XScale1;
YScaleE := YScale1;
Auto := Auto1;
GroupBox2.Caption := SignalType1.Text;
end;
if (Sender as TComboBox).Name = 'SignalType2' then
begin
Image := Image2;
XScaleE := XScale2;
YScaleE := YScale2;
Auto := Auto2;
GroupBox3.Caption := SignalType2.Text;
end;
if (Sender as TComboBox).Name = 'SignalType3' then
begin
Image := Image3;
XScaleE := XScale3;
YScaleE := YScale3;
Auto := Auto3;
GroupBox4.Caption := SignalType3.Text;
end;
case (Sender as TComboBox).ItemIndex of
0: //Сигнал на входе (X)
begin
if Auto.Checked then
begin
XScale := (Image.Width - XShift - XLeftShift) / Net.PointsNumber;
if Net.MaxX <> 0 then
YScale := (Image.Height/2 - YShift - YUpShift) / Net.MaxX;
XScaleE.Text := floattostr(XScale);
YScaleE.Text := floattostr(YScale);
end
else
begin
XScale := StrToFloat(XScaleE.Text);
YScale := StrToFloat(YScaleE.Text);
end;
DrawSignal(Net.X, Image, XShift, YShift, XScale, YScale);
end;
1: //y
begin
if Auto.Checked then
begin
XScale := (Image.Width - XShift - XLeftShift) / Net.PointsNumber;
if Net.MaxY <> 0 then
YScale := (Image.Height/2 - YShift - YUpShift) / Net.MaxY;
XScaleE.Text := floattostr(XScale);
YScaleE.Text := floattostr(YScale);
end
else
begin
XScale := StrToFloat(XScaleE.Text);
YScale := StrToFloat(YScaleE.Text);
end;
DrawSignal(Net.Y, Image, XShift, YShift, XScale, YScale);
end;
2://u
begin
if Auto.Checked then
begin
XScale := (Image.Width - XShift - XLeftShift) / Net.PointsNumber;
if Net.MaxU <> 0 then
YScale := (Image.Height/2 - YShift - YUpShift) / Net.MaxU;
XScaleE.Text := floattostr(XScale);
YScaleE.Text := floattostr(YScale);
end
else
begin
XScale := StrToFloat(XScaleE.Text);
YScale := StrToFloat(YScaleE.Text);
end;
DrawSignal(Net.U, Image, XShift, YShift, XScale, YScale);
end;
3://e
begin
if Auto.Checked then
begin
XScale := (Image.Width - XShift - XLeftShift) / Net.PointsNumber;
if Net.MaxE <> 0 then
YScale := (Image.Height/2 - YShift - YUpShift) / Net.MaxE;
XScaleE.Text := floattostr(XScale);
YScaleE.Text := floattostr(YScale);
end
else
begin
XScale := StrToFloat(XScaleE.Text);
YScale := StrToFloat(YScaleE.Text);
end;
DrawSignal(Net.E, Image, XShift, YShift, XScale, YScale);
end;
4://acp
begin
if Auto.Checked then
begin
if Net.MaxAcp <> 0 then
YScale := (Image.Height/2 - YShift - YUpShift) / Net.MaxACP;
XScale := (Image.Width - XShift - XLeftShift) / Net.PointsNumber;
XScaleE.Text := floattostr(XScale);
YScaleE.Text := floattostr(YScale);
end
else
begin
XScale := StrToFloat(XScaleE.Text);
YScale := StrToFloat(YScaleE.Text);
end;
DrawSignal(Net.ACP, Image, XShift, YShift, XScale, YScale);
end;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
SignalType1Change(SignalType1);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
i: longint;
s: string;
tempX, tempu, tempe, tempacp, tempy: preal;
begin
Status.Clear;
Status.Enabled := true;
Status.ReadOnly := true;
SaveButton.Visible := true;
s := 'Число точек в объекте: ' + inttostr(Net.PointsNumber);
Status.Lines.Add(s);
s := 'Число точек в X: ' + inttostr(Net.X.Count);
Status.Lines.Add(s);
s := 'Число точек в Y: ' + inttostr(Net.Y.Count);
Status.Lines.Add(s);
s := 'Число точек в E: ' + inttostr(Net.E.Count);
Status.Lines.Add(s);
s := 'Число точек в U: ' + inttostr(Net.U.Count);
Status.Lines.Add(s);
s := 'Число точек в ACP: ' + inttostr(Net.ACP.Count);
Status.Lines.Add(s);
for i := 0 to Net.PointsNumber - 1 do
begin
tempx := Net.X.Items[i];
tempy := Net.Y.Items[i];
tempE := Net.E.Items[i];
tempU := Net.U.Items[i];
tempacp := Net.ACP.Items[i];
s := 'i=' + inttostr(i) + '; x=' + floattostrf(tempx^, ffFixed, 3, 3)+ '; e=' + floattostrf(tempe^, ffFixed, 3, 3)+ '; y=' + floattostrf(tempy^, ffFixed, 3, 3)+ '; acp=' + floattostrf(tempacp^, ffFixed, 3, 3)+ '; u=' + floattostrf(tempu^, ffFixed, 3, 3);
Status.Lines.Add(s);
end;
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
SignalType1Change(SignalType2);
end;

procedure TForm1.SpeedButton3Click(Sender: TObject);
begin
SignalType1Change(SignalType3);
end;

procedure TForm1.PointsNumberChange(Sender: TObject);
begin
if (PointsNumber.Text <> '') then
if (PointsNumber.Value > 0) then
begin
Net.PointsNumber := PointsNumber.Value;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

procedure TForm1.EnterSignalTypeChange(Sender: TObject);
begin
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;

procedure TForm1.Auto1Click(Sender: TObject);
begin
SignalType1Change(SignalType1);
XScale1.Enabled := not Auto1.Checked;
YScale1.Enabled := not Auto1.Checked;
SpeedButton1.Enabled := not Auto1.Checked;
end;

procedure TForm1.Auto2Click(Sender: TObject);
begin
SignalType1Change(SignalType2);
XScale2.Enabled := not Auto2.Checked;
YScale2.Enabled := not Auto2.Checked;
SpeedButton2.Enabled := not Auto2.Checked;
end;

procedure TForm1.Auto3Click(Sender: TObject);
begin
SignalType1Change(SignalType3);
XScale3.Enabled := not Auto3.Checked;
YScale3.Enabled := not Auto3.Checked;
SpeedButton3.Enabled := not Auto3.Checked;
end;

procedure TForm1.SpeedButton5Click(Sender: TObject);
var
XScale, YScale: real;
begin
Application.CreateForm(TForm2, Form2);
InitImage(Form2.Image1);
case SignalType1.ItemIndex of
0:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxX;
SpecialDraw(Net.X, Form2.Image1, XShift, YShift, XScale, YScale, 'Входной сигнал');
end;
1:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxY;
SpecialDraw(Net.Y, Form2.Image1, XShift, YShift, XScale, YScale, 'Выходной сигнал');
end;
2:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxU;
SpecialDraw(Net.U, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после восстановления');
end;
3:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxE;
SpecialDraw(Net.E, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал на объект');
end;
4:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxACP;
SpecialDraw(Net.ACP, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после отбора');
end;
end;
Form2.Visible := true;
end;

procedure TForm1.SpeedButton6Click(Sender: TObject);
var
XScale, YScale: real;
begin
Application.CreateForm(TForm2, Form2);
InitImage(Form2.Image1);
case SignalType2.ItemIndex of
0:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxX;
SpecialDraw(Net.X, Form2.Image1, XShift, YShift, XScale, YScale, 'Входной сигнал');
end;
1:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxY;
SpecialDraw(Net.Y, Form2.Image1, XShift, YShift, XScale, YScale, 'Выходной сигнал');
end;
2:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxU;
SpecialDraw(Net.U, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после восстановления');
end;
3:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxE;
SpecialDraw(Net.E, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал на объект');
end;
4:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxACP;
SpecialDraw(Net.ACP, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после отбора');
end;
end;
Form2.Visible := true;
end;

procedure TForm1.SpeedButton7Click(Sender: TObject);
var
XScale, YScale: real;
begin
Application.CreateForm(TForm2, Form2);
InitImage(Form2.Image1);
case SignalType3.ItemIndex of
0:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxX;
SpecialDraw(Net.X, Form2.Image1, XShift, YShift, XScale, YScale, 'Входной сигнал');
end;
1:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxY;
SpecialDraw(Net.Y, Form2.Image1, XShift, YShift, XScale, YScale, 'Выходной сигнал');
end;
2:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxU;
SpecialDraw(Net.U, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после восстановления');
end;
3:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxE;
SpecialDraw(Net.E, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал на объект');
end;
4:
begin
XScale := (Form2.Image1.Width - XShift) / Net.PointsNumber;
YScale := ((Form2.Image1.Height - YShift - YUpShift)/ 2) / Net.MaxACP;
SpecialDraw(Net.ACP, Form2.Image1, XShift, YShift, XScale, YScale, 'Сигнал после отбора');
end;
end;
Form2.Visible := true;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
EnterSignalType.ItemIndex := 0;
end;

procedure TForm1.SaveButtonClick(Sender: TObject);
begin
Button1Click(Sender);
if SaveDialog1.Execute then
begin
Status.Lines.SaveToFile(SaveDialog1.FileName);
ShowMessage('Статус сохранен.');
end;
end;

procedure TForm1.TEditChange(Sender: TObject);
begin
if (TEdit.Text <> '') then
if (TEdit.Value > 0) then
begin
Net.T := TEdit.Value;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

procedure TForm1.T1EditChange(Sender: TObject);
begin
if (T1Edit.Text <> '') then
if (T1Edit.Value > 0) then
begin
Net.T1 := T1Edit.Value;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

procedure TForm1.K1EditChange(Sender: TObject);
begin
if (K1Edit.Text <> '') then
if (K1Edit.Value > 0) then
begin
Net.K1 := K1Edit.Value / 10;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

procedure TForm1.T2EditChange(Sender: TObject);
begin
if (T2Edit.Text <> '') then
if (T2Edit.Value > 0) then
begin
Net.T2 := T2Edit.Value;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

procedure TForm1.K2EditChange(Sender: TObject);
begin
if (K2Edit.Text <> '') then
if (K2Edit.Value > 0) then
begin
Net.K2 := K2Edit.Value / 10;
Net.CreatePoints(EnterSignalType.ItemIndex);
Net.Calculate;
SignalType1Change(SignalType1);
SignalType1Change(SignalType2);
SignalType1Change(SignalType3);
end;
end;

end.
Соседние файлы в папке OS4Delphi4
  • #
    30.04.2019256 б24OS.dpr
  • #
    30.04.2019876 б23OS.res
  • #
    30.04.2019252 б23OS.~dp
  • #
    30.04.201920.95 Кб23OSUnit1.dcu
  • #
    30.04.20198.46 Кб23OSUnit1.dfm
  • #
    30.04.201917.09 Кб23OSUnit1.pas
  • #
    30.04.20198.46 Кб23OSUnit1.~df
  • #
    30.04.201917.09 Кб23OSUnit1.~pa
  • #
    30.04.20198.66 Кб24OSUnit2.dcu
  • #
    30.04.20199.16 Кб23OSUnit2.pas
  • #
    30.04.20199.15 Кб23OSUnit2.~pa