Advertisement
gguuppyy

форма12

Feb 20th, 2024 (edited)
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 12.10 KB | None | 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.     Clipbrd,
  13.     Vcl.Controls,
  14.     Vcl.Forms,
  15.     Vcl.Dialogs,
  16.     Vcl.StdCtrls,
  17.     Vcl.Menus,
  18.     Vcl.ExtCtrls,
  19.     Vcl.Imaging.Pngimage;
  20.  
  21. Type
  22.     TMainForm = Class(TForm)
  23.         Button1: TButton;
  24.         EditA: TEdit;
  25.         EditB: TEdit;
  26.         MainMenu1: TMainMenu;
  27.         N1: TMenuItem;
  28.         N2: TMenuItem;
  29.         N3: TMenuItem;
  30.         N4: TMenuItem;
  31.         N5: TMenuItem;
  32.         Y1: TLabel;
  33.         X: TLabel;
  34.         BalloonHint1: TBalloonHint;
  35.         OpenDialog1: TOpenDialog;
  36.         SaveDialog1: TSaveDialog;
  37.         Y: TLabel;
  38.         Result: TMemo;
  39.         LabelTask: TLabel;
  40.         Procedure Button1Click(Sender: TObject);
  41.  
  42.         Procedure N2Click(Sender: TObject);
  43.         Procedure N5Click(Sender: TObject);
  44.  
  45.         Procedure EditBKeyPress(Sender: TObject; Var Key: Char);
  46.         Procedure EditAKeyPress(Sender: TObject; Var Key: Char);
  47.         Procedure N3Click(Sender: TObject);
  48.         Procedure GetPath(Var Path: String);
  49.         Procedure N4Click(Sender: TObject);
  50.         Procedure Checker(Var IsCorrect: Boolean);
  51.         Procedure N1Click(Sender: TObject);
  52.         Procedure EditAChange(Sender: TObject);
  53.         Procedure EditBChange(Sender: TObject);
  54.         Procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  55.         Procedure FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  56.         Procedure EditAContextPopup(Sender: TObject; MousePos: TPoint; Var Handled: Boolean);
  57.         Procedure EditBContextPopup(Sender: TObject; MousePos: TPoint; Var Handled: Boolean);
  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.  
  71. Implementation
  72.  
  73. {$R *.dfm}
  74.  
  75. Uses
  76.     Instruction,
  77.     Information;
  78.  
  79. Procedure TmainForm.Checker(Var IsCorrect: Boolean);
  80.  
  81. Begin
  82.     IsCorrect := True;
  83.  
  84.     Try
  85.         StrtoFloat(EditA.Text);
  86.     Except
  87.         IsCorrect := False;
  88.     End;
  89.  
  90.     Try
  91.  
  92.         StrtoFloat(EditB.Text);
  93.     Except
  94.         IsCorrect := False;
  95.     End;
  96.  
  97. End;
  98.  
  99. Procedure TMainForm.Button1Click(Sender: TObject);
  100. Var
  101.     A, B, R, I: Integer;
  102.     IsCorrect: Boolean;
  103. Begin
  104.     Checker(IsCorrect);
  105.     If IsCorrect Then
  106.     Begin
  107.  
  108.         A := StrtoInt(EditA.Text);
  109.         B := StrtoInt(EditB.Text);
  110.         R := 1;
  111.         If (A < (B + 1)) Then
  112.         Begin
  113.             A := A - 1;
  114.             for i := 0 to A do
  115.             begin
  116.                 R := R*(B-I);
  117.  
  118.             end;
  119.             Result.Lines.Clear;
  120.             Result.Lines.Add('Число размещений равно ' +FloatToStr(R));
  121.         End
  122.         Else
  123.         Begin
  124.             ShowMessage('Введите верные значения, где N > M.');
  125.         End;
  126.  
  127.     End
  128.     Else
  129.     Begin
  130.         ShowMessage('Заполните все поля');
  131.     End;
  132.  
  133. End;
  134.  
  135.  
  136. Procedure TMainForm.EditBChange(Sender: TObject);
  137. Var
  138.     Value: Double;
  139. Begin
  140.     If TryStrToFloat(EditB.Text, Value) Then
  141.     Begin
  142.         If (Value < 0) Then
  143.         Begin
  144.             BalloonHint1.Title := 'Неверное значение.';
  145.             BalloonHint1.Description := 'N должно быть больше 0.';
  146.             BalloonHint1.ImageIndex := 1;
  147.             BalloonHint1.ShowHint(EditB);
  148.             EditB.Text := '';
  149.         End;
  150.     End;
  151.     EditB.MaxLength := 5;
  152.     If Length(EditB.Text) = 0 Then
  153.     Begin
  154.         Result.Lines.Clear;
  155.     End;
  156. End;
  157.  
  158. Procedure TMainForm.EditBContextPopup(Sender: TObject; MousePos: TPoint; Var Handled: Boolean);
  159. Begin
  160.     Handled := True;
  161. End;
  162.  
  163. Procedure TMainForm.EditBKeyPress(Sender: TObject; Var Key: Char);
  164. Begin
  165.     If Key In NumSet Then
  166.     Begin
  167.         If Key = '0' Then
  168.         Begin
  169.             If Length(EditB.Text) = 1 Then
  170.             Begin
  171.                 If EditB.Text[1] In ['0'] Then
  172.                 Begin
  173.                     Key := #0;
  174.                 End;
  175.             End;
  176.             If Length(EditB.Text) = 2 Then
  177.             Begin
  178.                 If (EditB.Text[1] = '-') AND (EditB.Text[2] = '0') Then
  179.                 Begin
  180.                     Key := #0;
  181.                 End;
  182.             End;
  183.         End;
  184.  
  185.         If Key = #45 Then
  186.         Begin
  187.             If Length(EditB.Text) > 0 Then
  188.             Begin
  189.                 BalloonHint1.Title := 'Недопустимый символ.';
  190.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  191.                 BalloonHint1.ShowHint(EditB);
  192.                 Key := #0;
  193.             End;
  194.         End;
  195.  
  196.         If Key In [',', '.'] Then
  197.         Begin
  198.             Key := FormatSettings.DecimalSeparator;
  199.             If Pos(Key, EditB.Text) <> 0 Then
  200.             Begin
  201.                 BalloonHint1.Title := 'Недопустимый символ.';
  202.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  203.                 BalloonHint1.ImageIndex := 1;
  204.                 BalloonHint1.ShowHint(EditB);
  205.                 Key := #0;
  206.             End
  207.             Else
  208.                 If Length(EditB.Text) > 0 Then
  209.                 Begin
  210.                     If (EditB.Text[1] = '-') AND (Length(EditB.Text) = 1) Then
  211.                     Begin
  212.                         Key := #0;
  213.                     End
  214.                 End
  215.                 Else
  216.                     If EditB.SelStart = 0 Then
  217.                     Begin
  218.                         EditB.Text := '0' + EditB.Text;
  219.                         EditB.SelStart := 1;
  220.                     End;
  221.         End;
  222.     End
  223.     Else
  224.     Begin
  225.         BalloonHint1.Title := 'Недопустимый символ.';
  226.         BalloonHint1.Description := 'Здесь можно ввести только число.';
  227.         BalloonHint1.ImageIndex := 1;
  228.         BalloonHint1.ShowHint(EditB);
  229.         Key := #0;
  230.     End;
  231. End;
  232.  
  233. Procedure TMainForm.FormCloseQuery(Sender: TObject; Var CanClose: Boolean);
  234. Var
  235.     Confirmation: Integer;
  236. Begin
  237.      Confirmation := Application.MessageBox('Вы действительно хотите выйти?', 'Выход', MB_YESNO);
  238.     CanClose := Confirmation = IDYES;
  239. End;
  240.  
  241. Procedure TMainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
  242. Begin
  243.     If (EditA.Text <> '') And (EditB.Text <> '') Then
  244.         Button1.Enabled := True
  245.     Else
  246.         Button1.Enabled := False;
  247. End;
  248.  
  249. Procedure TMainForm.EditAChange(Sender: TObject);
  250. Var
  251.     Value: Double;
  252. Begin
  253.     If TryStrToFloat(EditA.Text, Value) Then
  254.     Begin
  255.         If (Value < 1) Then
  256.         Begin
  257.             BalloonHint1.Title := 'Неверное значение.';
  258.             BalloonHint1.Description := 'N должно быть больше 0.';
  259.             BalloonHint1.ImageIndex := 1;
  260.             BalloonHint1.ShowHint(EditA);
  261.             EditA.Text := '';
  262.         End;
  263.     End;
  264.     EditA.MaxLength := 5;
  265.     If Length(EditA.Text) = 0 Then
  266.     Begin
  267.         Result.Lines.Clear;
  268.     End;
  269. End;
  270.  
  271. Procedure TMainForm.EditAContextPopup(Sender: TObject; MousePos: TPoint; Var Handled: Boolean);
  272. Begin
  273.     Handled := True;
  274. End;
  275.  
  276. Procedure TMainForm.EditAKeyPress(Sender: TObject; Var Key: Char);
  277. Begin
  278.  
  279.     If Key In NumSet Then
  280.     Begin
  281.         If Key = '0' Then
  282.         Begin
  283.             If Length(EditA.Text) = 1 Then
  284.             Begin
  285.                 If EditA.Text[1] In ['0'] Then
  286.                 Begin
  287.                     Key := #0;
  288.                 End;
  289.             End;
  290.             If Length(EditA.Text) = 2 Then
  291.             Begin
  292.                 If (EditA.Text[1] = '-') AND (EditA.Text[2] = '0') Then
  293.                 Begin
  294.                     Key := #0;
  295.                 End;
  296.             End;
  297.         End;
  298.  
  299.         If Key = #45 Then
  300.         Begin
  301.             If Length(EditA.Text) > 0 Then
  302.             Begin
  303.                 BalloonHint1.Title := 'Недопустимый символ.';
  304.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  305.                 BalloonHint1.ImageIndex := 1;
  306.                 BalloonHint1.ShowHint(EditA);
  307.                 Key := #0;
  308.             End;
  309.         End;
  310.  
  311.         If Key In [',', '.'] Then
  312.         Begin
  313.             Key := FormatSettings.DecimalSeparator;
  314.             If Pos(Key, EditA.Text) <> 0 Then
  315.             Begin
  316.                 BalloonHint1.Title := 'Недопустимый символ.';
  317.                 BalloonHint1.Description := 'Здесь можно ввести только число.';
  318.                 BalloonHint1.ImageIndex := 1;
  319.                 BalloonHint1.ShowHint(EditA);
  320.                 Key := #0;
  321.             End
  322.             Else
  323.                 If Length(EditA.Text) > 0 Then
  324.                 Begin
  325.                     If (EditA.Text[1] = '-') AND (Length(EditA.Text) = 1) Then
  326.                     Begin
  327.                         Key := #0;
  328.                     End
  329.                 End
  330.                 Else
  331.                     If EditA.SelStart = 0 Then
  332.                     Begin
  333.                         EditA.Text := '0' + EditA.Text;
  334.                         EditA.SelStart := 1;
  335.                     End;
  336.         End;
  337.     End
  338.     Else
  339.     Begin
  340.        BalloonHint1.Title := 'Недопустимый символ.';
  341.         BalloonHint1.Description := 'Здесь можно ввести только число.';
  342.         BalloonHint1.ImageIndex := 1;
  343.         BalloonHint1.ShowHint(EditA);
  344.         Key := #0;
  345.     End;
  346. End;
  347.  
  348. Procedure TMainForm.N1Click(Sender: TObject);
  349. Begin
  350.     If Result.Lines.Count = 0 Then
  351.     Begin
  352.         N4.Enabled := False;
  353.     End
  354.     Else
  355.     Begin
  356.         N4.Enabled := True;
  357.     End;
  358. End;
  359.  
  360. Procedure TMainForm.N2Click(Sender: TObject);
  361. Begin
  362.     InstructionForm.ShowModal;
  363. End;
  364.  
  365. Procedure TMainForm.GetPath(Var Path: String);
  366. Begin
  367.     If OpenDialog1.Execute Then
  368.     Begin
  369.         Path := OpenDialog1.FileName;
  370.     End
  371.     Else
  372.     Begin
  373.         ShowMessage('Открытие файла отменено!');
  374.     End;
  375. End;
  376.  
  377. procedure TMainForm.N3Click(Sender: TObject);
  378. var
  379.   IsCorrect, Fail: Boolean;
  380.   Path, A, B, Str: String;
  381.   Count: Integer;
  382.   FileElem: TextFile;
  383. begin
  384.   GetPath(Path);
  385.  
  386.   AssignFile(FileElem, Path);
  387.   Fail := False;
  388.   IsCorrect := True;
  389.   Count := 0;
  390.  
  391.   if not FileExists(Path) then
  392.   begin
  393.     ShowMessage('Файл не найден!');
  394.     Exit;
  395.   end;
  396.  
  397.   try
  398.     try
  399.       Reset(FileElem);
  400.     except
  401.       CloseFile(FileElem);
  402.       IsCorrect := False;
  403.       ShowMessage('Ошибка открытия файла.');
  404.     end;
  405.  
  406.     if IsCorrect then
  407.     begin
  408.       while not Eof(FileElem) do
  409.       begin
  410.         ReadLn(FileElem, Str);
  411.         Inc(Count);
  412.       end;
  413.  
  414.       CloseFile(FileElem);
  415.       if Count <> 2 then
  416.         Fail := True;
  417.     end;
  418.  
  419.     if IsCorrect then
  420.     begin
  421.       Reset(FileElem);
  422.  
  423.       try
  424.         Readln(FileElem, A);
  425.         if not TryStrToInt(A, Count) then
  426.           Fail := True;
  427.       except
  428.         Fail := True;
  429.       end;
  430.  
  431.       try
  432.         Readln(FileElem, B);
  433.         if not TryStrToInt(B, Count) then
  434.           Fail := True;
  435.       except
  436.         Fail := True;
  437.       end;
  438.     end;
  439.   finally
  440.     CloseFile(FileElem);
  441.     if Fail then
  442.       ShowMessage('Проверьте введенные данные и повторите попытку!')
  443.     else
  444.     begin
  445.       EditA.Text := A;
  446.       EditB.Text := B;
  447.     end;
  448.     ShowMessage('Обработка завершена.');
  449.   end;
  450. end;
  451.  
  452. Procedure TMainForm.N4Click(Sender: TObject);
  453. Begin
  454.  
  455.     If SaveDialog1.Execute Then
  456.     Begin
  457.  
  458.         Result.Lines.SaveToFile(SaveDialog1.FileName);
  459.     End
  460.     Else
  461.  
  462.     Begin
  463.         ShowMessage('Сохранение в файл отменено.');
  464.     End;
  465.  
  466. End;
  467.  
  468. Procedure TMainForm.N5Click(Sender: TObject);
  469. Begin
  470.     InformationForm.ShowModal;
  471. End;
  472.  
  473. End.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement