Advertisement
Guest User

Untitled

a guest
Dec 14th, 2018
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.70 KB | None | 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.Imaging.jpeg,
  8.   Vcl.ExtCtrls, Vcl.Menus;
  9.  
  10. type
  11.   TStatkevich_Angelina_851001_Lab1_1 = class(TForm)
  12.     LbEnterSide1: TLabel;
  13.     LbEnterSide2: TLabel;
  14.     LbEnterSide3: TLabel;
  15.     EdSide1: TEdit;
  16.     EdSide2: TEdit;
  17.     EdSide3: TEdit;
  18.     BtDefiner: TButton;
  19.     LbRes: TLabel;
  20.     MainMenu: TMainMenu;
  21.     OpenFile: TOpenDialog;
  22.     FileMenuItem: TMenuItem;
  23.     OpenMenuItem: TMenuItem;
  24.     SaveAsMenuItem: TMenuItem;
  25.     SaveFile: TSaveDialog;
  26.     HelpMenuItem: TMenuItem;
  27.     Aboutprogram1: TMenuItem;
  28.     Aboutprogrammer1: TMenuItem;
  29.     LineMenuItem: TMenuItem;
  30.     ExitMenuItem: TMenuItem;
  31.     PopupMenu: TPopupMenu;
  32.     procedure BtDefinerClick(Sender: TObject);
  33.     procedure EdSide2Change(Sender: TObject);
  34.     procedure EdSide3Change(Sender: TObject);
  35.     procedure EdSide1Change(Sender: TObject);
  36.     procedure OpenMenuItemClick(Sender: TObject);
  37.     procedure SaveAsMenuItemClick(Sender: TObject);
  38.     procedure FormClose(Sender: TObject; var Action: TCloseAction);
  39.     procedure AboutProgramClick(Sender: TObject);
  40.     procedure AboutProgrammerClick(Sender: TObject);
  41.     procedure ExitMenuItemClick(Sender: TObject);
  42.     procedure CheckInput(Sender: TObject);
  43.     procedure EdSideKeyPress(Sender: TObject; var Key: Char);
  44.     function CheckFileName(MyFile: string): string;
  45.   private
  46.     { Private declarations }
  47.   public
  48.     { Public declarations }
  49.   end;
  50.  
  51. var
  52.   Statkevich_Angelina_851001_Lab1_1: TStatkevich_Angelina_851001_Lab1_1;
  53.  
  54. implementation
  55.  
  56. {$R *.dfm}
  57.  
  58. procedure TStatkevich_Angelina_851001_Lab1_1.AboutProgramClick(Sender: TObject);
  59. const
  60.    sms = 'Программа определяет, является ли треугольник равносторонним';
  61. begin
  62.    MessageDlg(sms, mtInformation, [mbOk], 0);
  63. end;
  64.  
  65. procedure TStatkevich_Angelina_851001_Lab1_1.AboutProgrammerClick(Sender: TObject);
  66. begin
  67.    MessageDlg('Программа разработана Статкевич Ангелиной' + #13 +
  68.    'студенткой группы 851001, ФКСиС, ПОИТ' , mtInformation, [mbOk], 0);
  69. end;
  70.  
  71.  
  72.  
  73. procedure TStatkevich_Angelina_851001_Lab1_1.BtDefinerClick(Sender: TObject);
  74. var
  75.    FirstSide, SecondSide, ThirdSide: Real;
  76. begin
  77.    FirstSide := StrToFloat(EdSide1.Text);
  78.    SecondSide := StrToFloat(EdSide2.Text);
  79.    ThirdSide := StrToFloat(EdSide3.Text);
  80.    if (FirstSide < SecondSide + ThirdSide) and (SecondSide < FirstSide + ThirdSide) and (ThirdSide < FirstSide + SecondSide) then
  81.    begin
  82.       if (FirstSide = SecondSide) and (SecondSide = ThirdSide) then
  83.          LbRes.Caption := 'Треугольник равносторонний'
  84.       else
  85.          LbRes.Caption := 'Треугольник неравносторонний';
  86.     end
  87.     else
  88.        LbRes.Caption := 'Треугольника с такими сторонами не существует';
  89.     SaveAsMenuItem.Enabled := True;
  90. end;
  91.  
  92. procedure TStatkevich_Angelina_851001_Lab1_1.CheckInput(Sender: TObject);
  93. begin
  94.    with Sender as TEdit do
  95.    begin
  96.       if (length(Text) > 15) then
  97.       begin
  98.          color := clMaroon;
  99.          ShowMessage('Ошибка ввода. Вы ввели слишком большое число');
  100.          BtDefiner.Enabled := false;
  101.          Clear;
  102.       end
  103.       else
  104.          color := clWhite;
  105.    end;
  106. end;
  107.  
  108. function GetIsRepeated(Text: string): Boolean;
  109. var
  110.    i: Integer;
  111.    IsRepeated: Boolean;
  112. begin
  113.    i := 1;
  114.    IsRepeated := False;
  115.    while (i <= Length(Text)) and not (IsRepeated) do
  116.    begin
  117.       if (Text[i] = ',') or (Text[i] = '.') then
  118.          IsRepeated := True;
  119.       inc(i);
  120.    end;
  121.    GetIsRepeated := IsRepeated;
  122. end;
  123.  
  124. procedure TStatkevich_Angelina_851001_Lab1_1.EdSideKeyPress(Sender: TObject; var Key: Char);
  125. const
  126.    Numerals = ['0'..'9', #8, '.'];
  127. begin
  128.    with Sender as TEdit do
  129.    begin
  130.       if not (Key in Numerals) then
  131.          Key := #0;
  132.       if (Key = '.') and GetIsRepeated(Text) then
  133.          Key := #0;
  134.       if (Key = '.') and (Length(Text) = 0) then
  135.          Key := #0;
  136.       if (Key = '0') and (Length(Text) = 1) then
  137.          Key := #0;
  138.    end;
  139. end;
  140.  
  141. procedure TStatkevich_Angelina_851001_Lab1_1.EdSide1Change(Sender: TObject);
  142. begin
  143.    CheckInput(EdSide1);
  144.    EdSide2.Enabled := True;
  145.    LbRes.Caption := '';
  146. end;
  147.  
  148. procedure TStatkevich_Angelina_851001_Lab1_1.EdSide2Change(Sender: TObject);
  149. begin
  150.    CheckInput(EdSide2);
  151.    EdSide3.Enabled := True;
  152.    LbRes.Caption := '';
  153. end;
  154.  
  155. procedure TStatkevich_Angelina_851001_Lab1_1.EdSide3Change(Sender: TObject);
  156. begin
  157.    CheckInput(EdSide3);
  158.    BtDefiner.Enabled := True;
  159.    SaveAsMenuItem.Enabled := False;
  160.    LbRes.Caption := '';
  161. end;
  162.  
  163. procedure TStatkevich_Angelina_851001_Lab1_1.ExitMenuItemClick(Sender: TObject);
  164. begin
  165.     Close;
  166. end;
  167.  
  168. procedure TStatkevich_Angelina_851001_Lab1_1.FormClose(Sender: TObject; var Action: TCloseAction);
  169. var
  170.    Choice: Integer;
  171. begin
  172.    Choice := MessageDlg('Are you sure you want to exit?', mtConfirmation, [mbYes, mbNo], 0);
  173.    case Choice  of
  174.       1: ;
  175.       2: Action := caNone;
  176.    end;
  177. end;
  178.  
  179. procedure TStatkevich_Angelina_851001_Lab1_1.OpenMenuItemClick(Sender: TObject);
  180. var
  181.    inputFile: TextFile;
  182.    temp: Real;
  183. begin
  184.    if OpenFile.Execute then
  185.    begin
  186.        try
  187.           AssignFile(inputFile, OpenFile.FileName);
  188.           Reset(inputFile);
  189.           if SeekEof(inputFile) then
  190.           begin
  191.              MessageDlg('Похоже, файл пустой. Повторите попытку', mtError, [mbRetry], 0);
  192.              EdSide1.Clear;
  193.              EdSide2.Clear;
  194.              EdSide3.Clear;
  195.           end
  196.           else
  197.           begin
  198.              ReadLn(inputFile,temp);
  199.              EdSide1.Text := FloatToStr(temp);
  200.              ReadLn(inputFile,temp);
  201.              EdSide2.Text := FloatToStr(temp);
  202.              ReadLn(inputFile,temp);
  203.              EdSide3.Text := FloatToStr(temp);
  204.              CloseFile(inputFile);
  205.           end;
  206.        except
  207.           MessageDlg('Ошибка ввода данных. Повторите попытку.', mtError, [mbRetry], 0);
  208.           EdSide1.Clear;
  209.           EdSide2.Clear;
  210.           EdSide3.Clear;
  211.        end;
  212.    end;
  213.  
  214. end;
  215.  
  216. function TStatkevich_Angelina_851001_Lab1_1.CheckFileName(MyFile: string): string;
  217. var
  218.    i: byte;
  219.    isCorrect: boolean;
  220. begin
  221.    isCorrect := false;
  222.    i := 1;
  223.    while  not isCorrect and (i <= length(MyFile)) do
  224.    begin
  225.       if MyFile[i] = '.' then
  226.          isCorrect := true;
  227.       inc(i);
  228.    end;
  229.    if (not isCorrect) then
  230.       MyFile := MyFile + '.txt';
  231.    CheckFileName := MyFile;
  232. end;
  233.  
  234. procedure TStatkevich_Angelina_851001_Lab1_1.SaveAsMenuItemClick(Sender: TObject);
  235. var
  236.    outputFile: TextFile;
  237.    MyFile: string;
  238.    ButtonSelected: byte;
  239. begin
  240.    if SaveFile.Execute then
  241.    begin
  242.       MyFile := SaveFile.FileName;
  243.       MyFile := CheckFileName(MyFile);
  244.       if FileExists(MyFile) then
  245.       begin
  246.          ButtonSelected := MessageDlg('Сохранить результаты в файл?', mtConfirmation, [mbYes, mbNo], 0);
  247.          if ButtonSelected = mrYes then
  248.          begin
  249.             AssignFile(outputFile, MyFile);
  250.             Rewrite(outputFile);
  251.             writeln(outputFile, LbRes.Caption);
  252.             CloseFile(outputFile);
  253.          end
  254.          else
  255.             SaveAsMenuItemClick(Sender);
  256.       end
  257.       else
  258.       begin
  259.          AssignFile(outputFile, MyFile);
  260.          Rewrite(outputFile);
  261.          writeln(outputFile, LbRes.Caption);
  262.          CloseFile(outputFile);
  263.       end;
  264.    end;
  265. end;
  266.  
  267. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement