Advertisement
gguuppyy

форма11

Feb 3rd, 2024
147
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 11.02 KB | Source Code | 0 0
  1. Unit Main;
  2.  
  3. Interface
  4.  
  5. Uses
  6.     Winapi.Windows,
  7.     Winapi.Messages,
  8.     System.SysUtils,
  9.     System.Variants,
  10.     System.Classes,
  11.     Vcl.Graphics,
  12.     Vcl.Controls,
  13.     Vcl.Forms,
  14.     Vcl.Dialogs,
  15.     Vcl.StdCtrls,
  16.     Vcl.Menus,
  17.     Vcl.ExtCtrls,
  18.     Vcl.Imaging.Pngimage,
  19.     System.Actions,
  20.     Vcl.ActnList;
  21.  
  22. Type
  23.     TMainForm = Class(TForm)
  24.         ResButton: TButton;
  25.         EditKoefX: TEdit;
  26.         EditKoefY: TEdit;
  27.         MainMenu1: TMainMenu;
  28.         FileTab: TMenuItem;
  29.         InstructionTab: TMenuItem;
  30.         OpenOption: TMenuItem;
  31.         SaveOption: TMenuItem;
  32.         DeveloperTab: TMenuItem;
  33.         BalloonHint1: TBalloonHint;
  34.         OpenDialog1: TOpenDialog;
  35.         SaveDialog1: TSaveDialog;
  36.         MemoRes: TMemo;
  37.         ActionList1: TActionList;
  38.         Action1: TAction;
  39.         KoefXLabel: TLabel;
  40.         KoefYLabel: TLabel;
  41.         TaskImage: TImage;
  42.  
  43.         Procedure ResButtonClick(Sender: TObject);
  44.         Procedure InstructionTabClick(Sender: TObject);
  45.         Procedure DeveloperTabClick(Sender: TObject);
  46.         Procedure EditKoefYKeyPress(Sender: TObject; Var Key: Char);
  47.         Procedure EditKoefXKeyPress(Sender: TObject; Var Key: Char);
  48.         Procedure OpenOptionClick(Sender: TObject);
  49.         Procedure GetPath(Var Path: String);
  50.         Procedure SaveOptionClick(Sender: TObject);
  51.         Procedure Checker(Var IsCorrect: Boolean);
  52.         Procedure FileTabClick(Sender: TObject);
  53.         Procedure EditKoefXChange(Sender: TObject);
  54.         Procedure EditKoefYChange(Sender: TObject);
  55.         Procedure Action1Update(Sender: TObject);
  56.         Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  57.  
  58.     Private
  59.         { Private declarations }
  60.     Public
  61.         { Public declarations }
  62.     End;
  63.  
  64. Const
  65.     E: Double = 1.0E-3;
  66.     NumSet = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', #8, #44, #45, #46];
  67.  
  68. Var
  69.     MainForm: TMainForm;
  70.     KoefX, KoefY: Double;
  71.  
  72. Implementation
  73.  
  74. {$R *.dfm}
  75.  
  76. Uses
  77.     Instruction,
  78.     Information;
  79.  
  80. Procedure TMainForm.Checker(Var IsCorrect: Boolean);
  81.  
  82. Begin
  83.     IsCorrect := True;
  84.  
  85.     Try
  86.         StrtoFloat(EditKoefX.Text);
  87.     Except
  88.         IsCorrect := False;
  89.     End;
  90.  
  91.     Try
  92.         StrtoFloat(EditKoefY.Text);
  93.     Except
  94.         IsCorrect := False;
  95.     End;
  96.  
  97. End;
  98.  
  99. Procedure TMainForm.Action1Update(Sender: TObject);
  100. Begin
  101.     TAction(Sender).Enabled := (EditKoefX.Text <> '') And (EditKoefY.Text <> '')
  102. End;
  103.  
  104. Procedure TMainForm.ResButtonClick(Sender: TObject);
  105. Var
  106.  
  107.     IsCorrect: Boolean;
  108. Begin
  109.     Checker(IsCorrect);
  110.     If IsCorrect Then
  111.     Begin
  112.  
  113.         KoefX := StrtoFloat(EditKoefX.Text);
  114.         KoefY := StrtoFloat(EditKoefY.Text);
  115.  
  116.         If (KoefY + KoefX <= 1) And (2 * KoefX - KoefY <= 1) And (KoefY >= 0) Then
  117.         Begin
  118.             MemoRes.Lines.Add('Точка M (' + EditKoefX.Text + ';' + EditKoefY.Text + ')  принадлежит замкнутому множеству D');
  119.  
  120.         End
  121.         Else
  122.         Begin
  123.             MemoRes.Lines.Add('Точка M (' + EditKoefX.Text + ';' + EditKoefY.Text + ') не принадлежит замкнутому множеству D');
  124.         End;
  125.     End;
  126.  
  127. End;
  128.  
  129. Procedure TMainForm.EditKoefYChange(Sender: TObject);
  130. Begin
  131.  
  132.     If Length(EditKoefY.Text) = 0 Then
  133.     Begin
  134.         MemoRes.Lines.Clear;
  135.     End;
  136. End;
  137.  
  138. Procedure TMainForm.EditKoefYKeyPress(Sender: TObject; Var Key: Char);
  139. Begin
  140.     If Key In NumSet Then
  141.     Begin
  142.         If Key = '0' Then
  143.         Begin
  144.             If Length(EditKoefY.Text) = 1 Then
  145.             Begin
  146.                 If EditKoefY.Text[1] In ['0'] Then
  147.                 Begin
  148.                     Key := #0;
  149.                 End;
  150.             End;
  151.             If Length(EditKoefY.Text) = 2 Then
  152.             Begin
  153.                 If (EditKoefY.Text[1] = '-') AND (EditKoefY.Text[2] = '0') Then
  154.                 Begin
  155.                     Key := #0;
  156.                 End;
  157.             End;
  158.         End;
  159.    
  160.         If Key = #45 Then
  161.         Begin
  162.             If Length(EditKoefY.Text) > 0 Then
  163.             Begin
  164.                 BalloonHint1.Title := 'Недопустимый символ.';
  165.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  166.                 BalloonHint1.ImageIndex := 1;
  167.                 BalloonHint1.ShowHint(EditKoefY);
  168.                 Key := #0;
  169.             End;
  170.         End;
  171.  
  172.         If Key In [',', '.'] Then
  173.         Begin
  174.             Key := FormatSettings.DecimalSeparator;
  175.             If Pos(Key, EditKoefY.Text) <> 0 Then
  176.             Begin
  177.                 BalloonHint1.Title := 'Недопустимый символ.';
  178.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  179.                 BalloonHint1.ImageIndex := 1;
  180.                 BalloonHint1.ShowHint(EditKoefY);
  181.                 Key := #0;
  182.             End
  183.             Else
  184.                 If Length(EditKoefY.Text) > 0 Then
  185.                 Begin
  186.                     If (EditKoefY.Text[1] = '-') AND (Length(EditKoefY.Text) = 1) Then
  187.                     Begin
  188.                         Key := #0;
  189.                     End
  190.                 End
  191.                 Else
  192.                     If EditKoefY.SelStart = 0 Then
  193.                     Begin
  194.                         EditKoefY.Text := '0' + EditKoefY.Text;
  195.                         EditKoefY.SelStart := 1;
  196.                     End;
  197.         End;
  198.     End
  199.     Else
  200.     Begin
  201.         BalloonHint1.Title := 'Недопустимый символ.';
  202.         BalloonHint1.Description := 'Здесь можно ввести только число.';
  203.         BalloonHint1.ImageIndex := 1;
  204.         BalloonHint1.ShowHint(EditKoefY);
  205.         Key := #0;
  206.     End;
  207. End;
  208.  
  209. Procedure TMainForm.EditKoefXChange(Sender: TObject);
  210. Begin
  211.  
  212.     If Length(EditKoefX.Text) = 0 Then
  213.     Begin
  214.         MemoRes.Lines.Clear;
  215.     End;
  216. End;
  217.  
  218. Procedure TMainForm.EditKoefXKeyPress(Sender: TObject; Var Key: Char);
  219. Begin
  220.  
  221.     If Key In NumSet Then
  222.     Begin
  223.         If Key = '0' Then
  224.         Begin
  225.             If Length(EditKoefX.Text) = 1 Then
  226.             Begin
  227.                 If EditKoefX.Text[1] In ['0'] Then
  228.                 Begin
  229.                     Key := #0;
  230.                 End;
  231.             End;
  232.             If Length(EditKoefX.Text) = 2 Then
  233.             Begin
  234.                 If (EditKoefX.Text[1] = '-') AND (EditKoefX.Text[2] = '0') Then
  235.                 Begin
  236.                     Key := #0;
  237.                 End;
  238.             End;
  239.         End;
  240.  
  241.         If Key = #45 Then
  242.         Begin
  243.             If Length(EditKoefX.Text) > 0 Then
  244.             Begin
  245.                 BalloonHint1.Title := 'Недопустимый символ.';
  246.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  247.                 BalloonHint1.ImageIndex := 1;
  248.                 BalloonHint1.ShowHint(EditKoefX);
  249.                 Key := #0;
  250.             End;
  251.         End;
  252.  
  253.         If Key In [',', '.'] Then
  254.         Begin
  255.             Key := FormatSettings.DecimalSeparator;
  256.             If Pos(Key, EditKoefX.Text) <> 0 Then
  257.             Begin
  258.                 BalloonHint1.Title := 'Недопустимый символ.';
  259.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  260.                 BalloonHint1.ImageIndex := 1;
  261.                 BalloonHint1.ShowHint(EditKoefX);
  262.                 Key := #0;
  263.             End
  264.             Else
  265.                 If Length(EditKoefX.Text) > 0 Then
  266.                 Begin
  267.                     If (EditKoefX.Text[1] = '-') AND (Length(EditKoefX.Text) = 1) Then
  268.                     Begin
  269.                         Key := #0;
  270.                     End
  271.                 End
  272.                 Else
  273.                     If EditKoefX.SelStart = 0 Then
  274.                     Begin
  275.                         EditKoefX.Text := '0' + EditKoefX.Text;
  276.                         EditKoefX.SelStart := 1;
  277.                     End;
  278.         End;
  279.     End
  280.     Else
  281.     Begin
  282.         BalloonHint1.Title := 'Недопустимый символ.';
  283.         BalloonHint1.Description := 'Здесь можно ввести только число.';
  284.         BalloonHint1.ImageIndex := 1;
  285.         BalloonHint1.ShowHint(EditKoefX);
  286.         Key := #0;
  287.     End;
  288. End;
  289.  
  290. Procedure TMainForm.FileTabClick(Sender: TObject);
  291. Begin
  292.     If MemoRes.Lines.Count = 0 Then
  293.     Begin
  294.         SaveOption.Enabled := False;
  295.     End
  296.     Else
  297.     Begin
  298.         SaveOption.Enabled := True;
  299.     End;
  300. End;
  301.  
  302. Procedure TMainForm.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  303. Begin
  304.     If MessageDlg('Вы уверены, что хотите выйти?', MtConfirmation, [MbYes, MbNo], 0) = MrYes Then
  305.         CanClose := True
  306.     Else
  307.         CanClose := False;
  308. End;
  309.  
  310. Procedure TMainForm.InstructionTabClick(Sender: TObject);
  311. Begin
  312.     InstructionForm.ShowModal;
  313. End;
  314.  
  315. Procedure TMainForm.GetPath(Var Path: String);
  316. Begin
  317.     If OpenDialog1.Execute Then
  318.     Begin
  319.         Path := OpenDialog1.FileName;
  320.     End
  321.     Else
  322.     Begin
  323.         ShowMessage('Открытие файла отменено.');
  324.     End;
  325. End;
  326.  
  327. Procedure TMainForm.OpenOptionClick(Sender: TObject);
  328. Var
  329.     IsCorrect: Boolean;
  330.     Path, Errors, KoefX, KoefY: String;
  331.     FileElem: TextFile;
  332. Begin
  333.     GetPath(Path);
  334.  
  335.     AssignFile(FileElem, Path);
  336.  
  337.     IsCorrect := True;
  338.  
  339.     Try
  340.         Try
  341.             Reset(FileElem);
  342.         Except
  343.             CloseFile(FileElem);
  344.             IsCorrect := False;
  345.             ShowMessage('Ошибка открытия файла.');
  346.         End;
  347.  
  348.         If IsCorrect Then
  349.         Begin
  350.             Try
  351.                 Readln(FileElem, KoefX);
  352.                 StrtoFloat(KoefX);
  353.             Except
  354.                 Errors := 'Для X было присвоено значение 1, т.к. на вход поступило некорректное значение.';
  355.                 KoefX := '1';
  356.             End;
  357.  
  358.             Try
  359.                 Readln(FileElem, KoefY);
  360.                 StrtoFloat(KoefY);
  361.             Except
  362.                 Errors := Errors + #13#10 + 'Для Y было присвоено значение 1, т.к. на вход поступило некорректное значение.';
  363.                 KoefY := '1';
  364.             End;
  365.  
  366.         End;
  367.     Finally
  368.         CloseFile(FileElem);
  369.         ShowMessage('Импорт завершен.');
  370.     End;
  371.  
  372.     If Errors.Length > 0 Then
  373.     Begin
  374.         ShowMessage(Errors);
  375.     End;
  376.  
  377.     EditKoefX.Text := KoefX;
  378.     EditKoefY.Text := KoefY;
  379.  
  380. End;
  381.  
  382. Procedure TMainForm.SaveOptionClick(Sender: TObject);
  383. Begin
  384.  
  385.     If SaveDialog1.Execute Then
  386.     Begin
  387.  
  388.         MemoRes.Lines.SaveToFile(SaveDialog1.FileName);
  389.     End
  390.     Else
  391.  
  392.     Begin
  393.         ShowMessage('Сохранине в файл отменено.');
  394.     End;
  395.  
  396. End;
  397.  
  398. Procedure TMainForm.DeveloperTabClick(Sender: TObject);
  399. Begin
  400.     InformationForm.ShowModal;
  401. End;
  402.  
  403. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement