Advertisement
THOMAS_SHELBY_18

Шаблон для форм

Jan 27th, 2024
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 13.97 KB | Source Code | 0 0
  1. unit Unit1;
  2.  
  3. interface
  4.  
  5. uses
  6.   Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  7.   Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Menus, Vcl.ExtDlgs, Clipbrd;
  8.  
  9. type
  10.   TMainForm = class(TForm)
  11.     ConditionLabel: TLabel;
  12.     MainMenu: TMainMenu;
  13.     FileMenuItem: TMenuItem;
  14.     OpenMenuItem: TMenuItem;
  15.     SaveMenuItem: TMenuItem;
  16.     SaveAsMenuItem: TMenuItem;
  17.     ManualMenuItem: TMenuItem;
  18.     AboutDeveloperMenuItem: TMenuItem;
  19.     Label1: TLabel;
  20.     Label2: TLabel;
  21.     Label3: TLabel;
  22.     Label4: TLabel;
  23.     Edit1: TEdit;
  24.     Edit2: TEdit;
  25.     Edit3: TEdit;
  26.     CalculateButton: TButton;
  27.     Label5: TLabel;
  28.     AnswerLabel: TLabel;
  29.     SaveDialog: TSaveDialog;
  30.     Label6: TLabel;
  31.     Label7: TLabel;
  32.     Label8: TLabel;
  33.     Edit4: TEdit;
  34.     Edit5: TEdit;
  35.     Edit6: TEdit;
  36.     Label9: TLabel;
  37.     Edit7: TEdit;
  38.     procedure OpenMenuItemClick(Sender: TObject);
  39.     procedure ManualMenuItemClick(Sender: TObject);
  40.     procedure AboutDeveloperMenuItemClick(Sender: TObject);
  41.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  42.     procedure CalculateButtonClick(Sender: TObject);
  43.     procedure EditDblClick(Sender: TObject);
  44.     procedure EditChange(Sender: TObject);
  45.     procedure EditKeyPress(Sender: TObject; var Key: Char);
  46.     procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  47.     procedure CopyButtonClick(Sender: TObject);
  48.     procedure PasteButtonClick(Sender: TObject);
  49.     procedure CutButtonClick(Sender: TObject);
  50.     procedure CopyPastePopupMenuPopup(Sender: TObject);
  51.     procedure SaveAsMenuItemClick(Sender: TObject);
  52.     procedure SaveMenuItemClick(Sender: TObject);
  53.  
  54.   private
  55.     { Private declarations }
  56.   public
  57.     { Public declarations }
  58.   end;
  59.  
  60. var
  61.   MainForm: TMainForm;
  62.  
  63. const
  64.     MAX = 1000;
  65.     MIN = -1000;
  66.     kNULL = #0;
  67.     kBACKSPACE = #8;
  68.     kMINUS = #45;
  69.     kDOWN = 40;
  70.     kUP = 38;
  71.     kENTER = 13;
  72.     kINSERT = 45;
  73.  
  74. implementation
  75.  
  76. {$R *.dfm}
  77.  
  78. procedure TMainForm.AboutDeveloperMenuItemClick(Sender: TObject);
  79. begin
  80.    MessageBox(Handle, 'Разработчик: Наривончик Александр Михайлович, гр. 351004', 'О разработчике', MB_OK Or MB_ICONINFORMATION);
  81. end;
  82.  
  83. Function CalculateValue(X: Real): Real;
  84. Var
  85.     A, B, C, D, E: Integer;
  86. Begin
  87.     With MainForm Do
  88.     Begin
  89.         A := StrToInt(Edit1.Text);
  90.         B := StrToInt(Edit2.Text);
  91.         C := StrToInt(Edit3.Text);
  92.         D := StrToInt(Edit4.Text);
  93.         E := StrToInt(Edit5.Text);
  94.     End;
  95.     CalculateValue := ( A * X * X + B * X + C ) / ( D * X + E );
  96. End;
  97.  
  98. Function CalculateResult():Real;
  99.  
  100. Var
  101.     A, B, C, D, E, X1, X2: Integer;
  102.     K, M, N, T1, T2, Ymax: Real;
  103.  
  104. Begin
  105.     With MainForm Do
  106.     Begin
  107.         A := StrToInt(Edit1.Text);
  108.         B := StrToInt(Edit2.Text);
  109.         C := StrToInt(Edit3.Text);
  110.         D := StrToInt(Edit4.Text);
  111.         E := StrToInt(Edit5.Text);
  112.         X1 := StrToInt(Edit6.Text);
  113.         X2 := StrToInt(Edit7.Text);
  114.     End;
  115.  
  116.     If X2 < X1 Then
  117.     Begin
  118.         X1 := X1 + X2;
  119.         X2 := X1 - X2;
  120.         X1 := X1 - X2;
  121.     End;
  122.     K := A * D;
  123.     if K = 0 then
  124.     Begin
  125.         if (D = 0) And (A <> 0) then
  126.         Begin
  127.             T1 := -B / (2 * A);
  128.             Ymax := CalculateValue(X1);
  129.  
  130.             If CalculateValue(X2) > Ymax Then
  131.                 Ymax := CalculateValue(X2);
  132.  
  133.             If ( T1 > X1 ) And ( T1 < X2 ) Then
  134.                 If CalculateValue(T1) > Ymax Then
  135.                     Ymax := CalculateValue(T1);
  136.         End
  137.         Else
  138.         If (D <> 0) then
  139.         Begin
  140.             Ymax := CalculateValue(X1);
  141.  
  142.             If CalculateValue(X2) > Ymax Then
  143.                 Ymax := CalculateValue(X2);
  144.         End;
  145.     End
  146.     Else
  147.     Begin
  148.         M := 2 * A * E;
  149.         N := E * B - D * C;
  150.         Ymax := CalculateValue(X1);
  151.         If CalculateValue(X2) > Ymax Then
  152.             Ymax := CalculateValue(X2);
  153.          If ( M * M - 4 * K * N ) >= 0 Then
  154.           Begin
  155.             T1 := ( -M - Sqrt( M * M - 4 * K * N ) ) / ( 2 * K );
  156.             T2 := ( -M + Sqrt( M * M - 4 * K * N ) ) / ( 2 * K );
  157.             If ( T1 > X1 ) And ( T1 < X2 ) Then
  158.             Begin
  159.                 If CalculateValue(T1) > Ymax Then
  160.                 Begin
  161.                     Ymax := CalculateValue(T1);
  162.                 End
  163.             End;
  164.             If( T2 > X1 ) And ( T2 < X2 )Then
  165.             Begin
  166.                 If CalculateValue(T2) > Ymax Then
  167.                 Begin
  168.                     Ymax := CalculateValue(T2);
  169.                 End
  170.             End;
  171.         End;
  172.     End;
  173.     CalculateResult := Int(Ymax * 100)/100;
  174. End;
  175.  
  176. Function CheckEdit (Edit: TEdit): Boolean;
  177. Begin
  178.     With Edit Do
  179.     Begin
  180.         If (Length(Text) = 0) Or (Text = '-') Then
  181.             CheckEdit := False
  182.         Else
  183.             CheckEdit := True;
  184.     End;
  185. End;
  186.  
  187. Procedure EditButton1Enable();
  188. var
  189.     IsEditsCorrect: Boolean;
  190.     I: Byte;
  191. Begin
  192.     With MainForm Do
  193.     Begin
  194.         I := 0;
  195.         Repeat
  196.             Inc(I);
  197.             IsEditsCorrect := CheckEdit(TEdit(FindComponent('Edit' + IntToStr(I))));
  198.         Until (Not IsEditsCorrect) Or (I = 7);
  199.         If IsEditsCorrect Then
  200.             CalculateButton.Enabled := True
  201.         Else
  202.             CalculateButton.Enabled := False;
  203.     End;
  204. End;
  205.  
  206. procedure TMainForm.CalculateButtonClick(Sender: TObject);
  207. var
  208.     Answer: Real;
  209.     D, E, X1, X2: Integer;
  210. begin
  211.     D := StrToInt(Edit4.Text);
  212.     E := StrToInt(Edit5.Text);
  213.     X1 := StrToInt(Edit6.Text);
  214.     X2 := StrToInt(Edit7.Text);
  215.     If (D*X1 + E = 0) Or (D * X2 + E = 0) Then
  216.         MessageBox(Handle, 'Ошибка в задании функции (деление на 0)!', 'Ошибка', MB_OK Or MB_ICONERROR)
  217.     Else
  218.     Begin
  219.         Answer := CalculateResult;
  220.         AnswerLabel.Caption := FloatToStr(Answer);
  221.         SaveAsMenuItem.Enabled := True;
  222.         SaveMenuItem.Enabled := True;
  223.     End;
  224. end;
  225.  
  226. procedure TMainForm.CopyButtonClick(Sender: TObject);
  227. begin
  228.     TEdit(ActiveControl).CopyToClipboard;
  229. end;
  230.  
  231. procedure TMainForm.CopyPastePopupMenuPopup(Sender: TObject);
  232. var
  233.     Num, Code: Integer;
  234. begin
  235.     Val(Clipboard.AsText, Num, Code);
  236.     If Clipboard.HasFormat(CF_TEXT) And ((Code = 0) And (Num < MAX+1) And (Num > MIN-1)) Then
  237.         PasteButton.Enabled := True
  238.     Else
  239.         PasteButton.Enabled := False;
  240. end;
  241.  
  242. procedure TMainForm.PasteButtonClick(Sender: TObject);
  243. var
  244.     Num, Code: Integer;
  245. begin
  246.     with TEdit(ActiveControl)do
  247.     Begin
  248.         PasteFromClipboard;
  249.         Val(Text, Num, Code);
  250.         If (Code <> 0) Or (Num < MIN) Or (Num > MAX) Then
  251.         Begin
  252.             Text := '';
  253.             Beep;
  254.         End;
  255.     End;
  256. end;
  257.  
  258. Procedure SaveAnswer ();
  259. var
  260.     IsFileCorrect: Boolean;
  261.     FileOut: TextFile;
  262.     Path: String;
  263. Begin
  264.     With MainForm Do
  265.     Begin
  266.         IsFileCorrect := True;
  267.         Path := SaveDialog.FileName;
  268.         AssignFile(FileOut, Path);
  269.         Try
  270.             Rewrite(FileOut);
  271.         Except
  272.             IsFileCorrect := False;
  273.             MessageBox(Handle, 'Не удалось сохранить ответ в файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  274.         End;
  275.  
  276.         If IsFileCorrect then
  277.         Begin
  278.             Writeln(FileOut, 'Наибольшее значение функции на промежутке равно: ', AnswerLabel.Caption);
  279.             CloseFile(FileOut);
  280.             MessageBox(Handle, 'Сохранено успешно!', 'Сохранение', MB_OK Or MB_ICONINFORMATION);
  281.         End;
  282.     End;
  283. End;
  284. procedure TMainForm.SaveAsMenuItemClick(Sender: TObject);
  285. begin
  286.     If SaveDialog.Execute Then
  287.         SaveAnswer();
  288. end;
  289.  
  290. procedure TMainForm.SaveMenuItemClick(Sender: TObject);
  291. begin
  292.     If(SaveDialog.FileName = 'Answer') Then
  293.     Begin
  294.         If SaveDialog.Execute Then
  295.             SaveAnswer();
  296.     End
  297.     Else
  298.         SaveAnswer();
  299. end;
  300.  
  301. procedure TMainForm.CutButtonClick(Sender: TObject);
  302. begin
  303.     TEdit(ActiveControl).CutToClipboard;
  304. end;
  305.  
  306. ////////////////////// EDIT /////////////////////////////////////////////////
  307. procedure TMainForm.EditChange(Sender: TObject);
  308. var
  309.     S:String;
  310. begin
  311.     with Sender As TEdit do
  312.     Begin
  313.         if (Length(Text) > 1) then
  314.         Begin
  315.             if ((Text[1] = kMINUS ) Or (Text[1] = '0')) And (Text[2] = '0') then
  316.             Begin
  317.                 S := Text;
  318.                 Delete(S, 2, 1);
  319.                 Text := S;
  320.             End
  321.             Else
  322.             if (Text[1] = '0') And (Text[2] <> '0') then
  323.             Begin
  324.                 S := Text;
  325.                 Delete(S, 1, 1);
  326.                 Text := S;
  327.             End;
  328.  
  329.         End;
  330.  
  331.         EditButton1Enable;
  332.         if AnswerLabel.Caption <> '...' then
  333.         Begin
  334.             AnswerLabel.Caption := '...';
  335.             SaveAsMenuItem.Enabled := False;
  336.             SaveMenuItem.Enabled := False;
  337.         End;
  338.     End;
  339. end;
  340.  
  341. procedure TMainForm.EditDblClick(Sender: TObject);
  342. begin
  343.     with Sender As TEdit do
  344.         Text := '';
  345. end;
  346.  
  347. procedure TMainForm.EditKeyDown(Sender: TObject; var Key: Word;
  348.   Shift: TShiftState);
  349. Begin
  350.     with MainForm, Sender As TEdit do
  351.     case key of
  352.     kENTER, kDOWN:
  353.         SelectNext(ActiveControl, True, True);
  354.     kUP:
  355.         SelectNext(ActiveControl, False, True);
  356.     kINSERT:
  357.         Key := 0;
  358.     end;
  359. End;
  360.  
  361. procedure TMainForm.EditKeyPress(Sender: TObject; var Key: Char);
  362. var
  363.     Num, Code: Integer;
  364.     S: String;
  365. begin
  366.     with Sender As TEdit Do
  367.         case key of
  368.             '0'..'9', kMINUS:
  369.             Begin
  370.                 S := Text;
  371.                 Insert(Key, S, SelStart+1);
  372.                 Val (S, Num, Code);
  373.                 If (Code <> 0) And (S <> '-')  Then
  374.                 Begin
  375.                     Key := kNULL;
  376.                     Beep;
  377.                 End
  378.                 Else
  379.                     If (Num > MAX) Or (Num < MIN) Then
  380.                     Begin
  381.                         Key := kNULL;
  382.                         Beep;
  383.                     End
  384.             End;
  385.             kBACKSPACE:;
  386.         Else
  387.             Key := kNULL;
  388.         end;
  389. end;
  390. ////////////////////////////////////////////////////////////////////////////////
  391.  
  392. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  393. begin
  394.     CanClose := MessageBox(Handle, 'Вы действительно хотите выйти?', 'Вы уверены?', MB_YESNO Or MB_ICONQUESTION) = IDYES;
  395. end;
  396.  
  397. procedure TMainForm.ManualMenuItemClick(Sender: TObject);
  398. begin
  399.     MessageBox(Handle, '1. Последовательно введите все коэффициенты и задайте отрезок соответствующими значениями (целые числа от -1000 до 1000) в соответствующие поля.' + #13#10 + '2. Нажмите кнопку "Вычислить".' + #13#10 + '3. Получите результат!'+ #13#10 + '4. В случае ввода из файла убедитесь, что файл содержит все 7 чисел, записанных в отдельных строках', 'Инструкция', MB_OK Or MB_ICONINFORMATION);
  400. end;
  401.  
  402. Function ReadNumFromFile(Var FileIn: TextFile; Var Num: Integer): Boolean;
  403. Var
  404.     IsFileCorrect: Boolean;
  405.     NumStr: String;
  406.     Code: Integer;
  407.  
  408. Begin
  409.     Readln(FileIn, NumStr);
  410.     Val(NumStr, Num, Code);
  411.  
  412.     If Code = 0 then
  413.         IsFileCorrect := True
  414.     Else
  415.     Begin
  416.         MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  417.         IsFileCorrect := False;
  418.     End;
  419.  
  420.     If (IsFileCorrect) And ((Num < MIN) Or (Num > MAX)) then
  421.     Begin
  422.         MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  423.         IsFileCorrect := False;
  424.     End;
  425.  
  426.     ReadNumFromFile := IsFileCorrect;
  427. End;
  428.  
  429. procedure TMainForm.OpenMenuItemClick(Sender: TObject);
  430. var
  431.     FileIn: TextFile;
  432.     Path: String;
  433.     A, B, C, D, E, X1, X2: Integer;
  434.     IsFileCorrect: Boolean;
  435. begin
  436.     If OpenDialog.Execute Then
  437.     Begin
  438.         IsFileCorrect := True;
  439.         Path := OpenDialog.FileName;
  440.         AssignFile(FileIn, Path);
  441.  
  442.         Try
  443.             Reset(FileIn);
  444.         Except
  445.             IsFileCorrect := False;
  446.             MessageBox(Handle, 'Не удалось открыть файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  447.         End;
  448.  
  449.         If (IsFileCorrect) Then
  450.         Begin
  451.             IsFileCorrect := ReadNumFromFile(FileIn, A);
  452.             If (IsFileCorrect) Then
  453.                 IsFileCorrect := ReadNumFromFile(FileIn, B);
  454.             If (IsFileCorrect) Then
  455.                 IsFileCorrect := ReadNumFromFile(FileIn, C);
  456.             If (IsFileCorrect) Then
  457.                 IsFileCorrect := ReadNumFromFile(FileIn, D);
  458.             If (IsFileCorrect) Then
  459.                 IsFileCorrect := ReadNumFromFile(FileIn, E);
  460.             If (IsFileCorrect) Then
  461.                 IsFileCorrect := ReadNumFromFile(FileIn, X1);
  462.             If (IsFileCorrect) Then
  463.                 IsFileCorrect := ReadNumFromFile(FileIn, X2);
  464.  
  465.             If (IsFileCorrect) And Not EoF(FileIn) then
  466.             Begin
  467.                 IsFileCorrect := False;
  468.                 MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  469.             End;
  470.  
  471.             CloseFile(FileIn);
  472.  
  473.             If (IsFileCorrect) then
  474.             Begin
  475.                 Edit1.Text := IntToStr(A);
  476.                 Edit2.Text := IntToStr(B);
  477.                 Edit3.Text := IntToStr(C);
  478.                 Edit4.Text := IntToStr(D);
  479.                 Edit5.Text := IntToStr(E);
  480.                 Edit6.Text := IntToStr(X1);
  481.                 Edit7.Text := IntToStr(X2);
  482.  
  483.             End;
  484.         End;
  485.     End;
  486. end;
  487. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement