Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
76
Добавлен:
30.04.2019
Размер:
17 Кб
Скачать
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.2019876 б76OS.res
  • #
    30.04.20198 Кб76OSUnit1.~df
  • #
    30.04.201917 Кб76OSUnit1.~pa
  • #
    30.04.201921 Кб76OSUnit1.dcu
  • #
    30.04.20198 Кб76OSUnit1.dfm
  • #
    30.04.201917 Кб76OSUnit1.pas
  • #
    30.04.20199 Кб76OSUnit2.~pa
  • #
    30.04.20199 Кб77OSUnit2.dcu
  • #
    30.04.20199 Кб76OSUnit2.pas
  • #
    30.04.201911 Кб76OSUnit2v2.~pa
  • #
    30.04.20199 Кб76OSUnit2v2.dcu