Advertisement
THOMAS_SHELBY_18

2.1 form

Feb 1st, 2024
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 19.94 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.   Vcl.Grids;
  9.  
  10. type
  11.   TMainForm = class(TForm)
  12.     ConditionLabel: TLabel;
  13.     MainMenu: TMainMenu;
  14.     FileMenuItem: TMenuItem;
  15.     OpenMenuItem: TMenuItem;
  16.     SaveMenuItem: TMenuItem;
  17.     SaveAsMenuItem: TMenuItem;
  18.     ManualMenuItem: TMenuItem;
  19.     AboutDeveloperMenuItem: TMenuItem;
  20.     Label1: TLabel;
  21.     Label4: TLabel;
  22.     Edit1: TEdit;
  23.     AnswerLabel: TLabel;
  24.     SaveDialog: TSaveDialog;
  25.     OpenDialog: TOpenDialog;
  26.     CopyPastePopupMenu: TPopupMenu;
  27.     PasteButton: TMenuItem;
  28.     StringGrid: TStringGrid;
  29.     Label2: TLabel;
  30.     Edit2: TEdit;
  31.     CalculateButton: TButton;
  32.     ResetButton: TButton;
  33.     Label3: TLabel;
  34.     Label5: TLabel;
  35.     CoordCountEdit: TEdit;
  36.     Label6: TLabel;
  37.     procedure OpenMenuItemClick(Sender: TObject);
  38.     procedure ManualMenuItemClick(Sender: TObject);
  39.     procedure AboutDeveloperMenuItemClick(Sender: TObject);
  40.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  41.     procedure EditDblClick(Sender: TObject);
  42.     procedure EditChange(Sender: TObject);
  43.     procedure EditKeyPress(Sender: TObject; var Key: Char);
  44.     procedure EditKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  45.     procedure CopyButtonClick(Sender: TObject);
  46.     procedure PasteButtonClick(Sender: TObject);
  47.     procedure CutButtonClick(Sender: TObject);
  48.     procedure CopyPastePopupMenuPopup(Sender: TObject);
  49.     procedure SaveAsMenuItemClick(Sender: TObject);
  50.     procedure SaveMenuItemClick(Sender: TObject);
  51.     procedure FormCreate(Sender: TObject);
  52.     procedure ResetButtonClick(Sender: TObject);
  53.     procedure CalculateButtonClick(Sender: TObject);
  54.     procedure CoordCountEditChange(Sender: TObject);
  55.     procedure CoordCountEditKeyPress(Sender: TObject; var Key: Char);
  56.     procedure StringGridKeyPress(Sender: TObject; var Key: Char);
  57.     procedure StringGridSetEditText(Sender: TObject; ACol, ARow: Integer;
  58.       const Value: string);
  59.     procedure StringGridGetEditMask(Sender: TObject; ACol, ARow: Integer;
  60.       var Value: string);
  61.     procedure StringGridExit(Sender: TObject);
  62.  
  63.   private
  64.     { Private declarations }
  65.   public
  66.     { Public declarations }
  67.   end;
  68.  
  69. var
  70.   MainForm: TMainForm;
  71.   CoordCount: Integer;
  72.  
  73. const
  74.     MAX = 999;
  75.     MIN = -99;
  76.     kNULL = #0;
  77.     kBACKSPACE = #8;
  78.     kMINUS = #45;
  79.     kDOWN = 40;
  80.     kUP = 38;
  81.     kENTER = 13;
  82.     kINSERT = 45;
  83.  
  84. implementation
  85.  
  86. {$R *.dfm}
  87.  
  88. procedure TMainForm.AboutDeveloperMenuItemClick(Sender: TObject);
  89. begin
  90.    MessageBox(Handle, 'Разработчик: Наривончик Александр Михайлович, гр. 351004', 'О разработчике', MB_OK Or MB_ICONINFORMATION);
  91. end;
  92.  
  93. procedure TMainForm.ManualMenuItemClick(Sender: TObject);
  94. begin
  95.     MessageBox(Handle, '1. Введите в соответствующие поля количество вершин (от 3 до 20), координаты точки(от -99 до 999) и координаты каждой вершины (от -99 до 999).' + #13#10 + '2. Нажмите кнопку "Вычислить".' + #13#10 + '3. Получите результат!' + #13#10  + '4. В случае ввода из файла убедитесь, что файл содержит число от 3 до 20 (количество вершин), затем в каждой новой строке через пробел координаты каждой вершины, а затем и координаты точки.', 'Инструкция', MB_OK Or MB_ICONINFORMATION);
  96. end;
  97.  
  98. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  99. begin
  100.     CanClose := MessageBox(Handle, 'Вы действительно хотите выйти?', 'Вы уверены?', MB_YESNO Or MB_ICONQUESTION) = IDYES;
  101. end;
  102.  
  103. procedure TMainForm.FormCreate(Sender: TObject);
  104. Var
  105.     I:Integer;
  106. begin
  107.     CoordCount := 3;
  108.     StringGrid.Cells[0,1] := 'X';
  109.     StringGrid.Cells[0,2] := 'Y';
  110.     for I := 1 to CoordCount do
  111.         StringGrid.Cells[I,0] := IntToStr(I);
  112. end;
  113.  
  114. ////////////////////////////////////////////////////////////////////////////////
  115.  
  116. Procedure ClearStringGrid();
  117. Var
  118.     I, J: Integer;
  119. Begin
  120.     for I := 1 to 2 do
  121.         for j := 1 to CoordCount do
  122.             MainForm.StringGrid.Cells[J, I] := '';
  123. End;
  124.  
  125. Function CheckCoordEdit (Edit: TEdit): Boolean;
  126. Begin
  127.     With Edit Do
  128.     Begin
  129.         If (Length(Text) = 0) Or (Text = '1') Or (Text = '2') Then
  130.             CheckCoordEdit := False
  131.         Else
  132.             CheckCoordEdit := True;
  133.     End;
  134. End;
  135.  
  136. Function CheckEdit (Edit: TEdit): Boolean;
  137. Begin
  138.     With Edit Do
  139.     Begin
  140.         If (Length(Text) = 0) Or (Text = '-') Then
  141.             CheckEdit := False
  142.         Else
  143.             CheckEdit := True;
  144.     End;
  145. End;
  146.  
  147. Procedure EditButtonEnabled(Button: TButton);
  148. var
  149.     IsEditsCorrect: Boolean;
  150.     I:Integer;
  151. Begin
  152.     With MainForm Do
  153.     Begin
  154.         Button.Enabled := True;
  155.         for I := 1 to CoordCount do
  156.             if (Trim(StringGrid.Cells[I, 1]) = '-') Or (Trim(StringGrid.Cells[I, 2]) = '-') Or (Trim(StringGrid.Cells[I, 1])= '') Or (Trim(StringGrid.Cells[I, 2])= '') then
  157.                 Button.Enabled := False;
  158.  
  159.         if  Button.Enabled = True then
  160.             Button.Enabled := (CheckEdit(Edit1) And CheckEdit(Edit2) And CheckCoordEdit(CoordCountEdit));
  161.     End;
  162. End;
  163.  
  164. Procedure ResetStringGrid();
  165. Begin
  166.     With MainForm Do
  167.     Begin
  168.         CoordCountEdit.Text := '';
  169.         Edit1.Text := '';
  170.         Edit2.Text := '';
  171.         ClearStringGrid;
  172.         CoordCount := 3;
  173.  
  174.         StringGrid.Visible := False;
  175.         StringGrid.Visible := True;
  176.  
  177.         AnswerLabel.Caption := '';
  178.         SaveAsMenuItem.Enabled := False;
  179.         SaveMenuItem.Enabled := False;
  180.     End;
  181. End;
  182.  
  183. procedure TMainForm.ResetButtonClick(Sender: TObject);
  184. begin
  185.     ResetStringGrid;
  186. end;
  187. ////////////////////////////POPUP MENU /////////////////////////////////////
  188. procedure TMainForm.CopyPastePopupMenuPopup(Sender: TObject);
  189. var
  190.     Num, Code: Integer;
  191. begin
  192.     Val(Clipboard.AsText, Num, Code);
  193.     If (Code = 0) And (Num < MAX+1) And (Num > MIN-1) Then
  194.         PasteButton.Enabled := True
  195.     Else
  196.         PasteButton.Enabled := False;
  197. end;
  198.  
  199. procedure TMainForm.PasteButtonClick(Sender: TObject);
  200. var
  201.     Num, Code, CursPos: Integer;
  202.     S: String;
  203. begin
  204.     with TEdit(ActiveControl)do
  205.     Begin
  206.         CursPos := SelStart;
  207.         S := Text;
  208.  
  209.         PasteFromClipboard;
  210.         Val(Text, Num, Code);
  211.         If (Code <> 0) Or (Num < MIN) Or (Num > MAX) Then
  212.         Begin
  213.             Text := S;
  214.             SelStart := CursPos;
  215.             Beep;
  216.         End;
  217.     End;
  218. end;
  219.  
  220. procedure TMainForm.CutButtonClick(Sender: TObject);
  221. begin
  222.     TEdit(ActiveControl).CutToClipboard;
  223. end;
  224.  
  225. procedure TMainForm.CopyButtonClick(Sender: TObject);
  226. begin
  227.     TEdit(ActiveControl).CopyToClipboard;
  228. end;
  229.  
  230. procedure TMainForm.CalculateButtonClick(Sender: TObject);
  231. Var
  232.     N, I, X, Y, Min, Max: Integer;
  233.     IsPointOnPolygon, IsPointOnLine, IsPointBetweenXCoord, IsPointBetweenYCoord: Boolean;
  234.     ArrX, ArrY: Array Of Integer;
  235. begin
  236.     X := StrToInt(Edit1.Text);
  237.     Y := StrToInt(Edit2.Text);
  238.  
  239.     SaveAsMenuItem.Enabled := True;
  240.     SaveMenuItem.Enabled := True;
  241.  
  242.     N := CoordCount;
  243.     SetLength(ArrX, N+1);
  244.     SetLength(ArrY, N+1);
  245.  
  246.     for I := 1 to N do
  247.     Begin
  248.         ArrX[I-1] := StrToInt(StringGrid.Cells[I,1]);
  249.         ArrY[I-1] := StrToInt(StringGrid.Cells[I,2]);
  250.     End;
  251.  
  252.     ArrX[N] := ArrX[0];
  253.     ArrY[N] := ArrY[0];
  254.  
  255.     I := 1;
  256.     Repeat
  257.         IsPointOnLine := ((Y - ArrY[I-1]) * (ArrX[I] - ArrX[I-1]) = (ArrY[I] - ArrY[I-1]) * (X - ArrX[I-1]));
  258.  
  259.         If ArrX[I-1] > ArrX[I] Then
  260.         Begin
  261.             Min := ArrX[I];
  262.             Max := ArrX[I - 1];
  263.         End
  264.         Else
  265.         Begin
  266.             Min := ArrX[I - 1];
  267.             Max := ArrX[I];
  268.         End;
  269.  
  270.         IsPointBetweenXCoord := (X >= Min) And (X <= Max);
  271.  
  272.         If ArrY[I-1] > ArrY[I] Then
  273.         Begin
  274.             Min := ArrY[I];
  275.             Max := ArrY[I - 1];
  276.         End
  277.         Else
  278.         Begin
  279.             Min := ArrY[I - 1];
  280.             Max := ArrY[I];
  281.         End;
  282.  
  283.         IsPointBetweenYCoord := (Y >= Min) And (Y <= Max);
  284.  
  285.         IsPointOnPolygon := (IsPointOnLine And IsPointBetweenXCoord And IsPointBetweenYCoord);
  286.         Inc(I);
  287.     Until(IsPointOnPolygon) Or (I > N);
  288.  
  289.     If IsPointOnPolygon Then
  290.         AnswerLabel.Caption := 'Точка находится на одной из сторон многоугольника'
  291.     Else
  292.         AnswerLabel.Caption := 'Точка не находится ни на одной из сторон многоугольника';
  293. end;
  294.  
  295.  
  296. /////////////////////////////////////////// SAVE  ///////////////////////////
  297. Procedure SaveAnswer ();
  298. var
  299.     IsFileCorrect: Boolean;
  300.     FileOut: TextFile;
  301.     Path: String;
  302.     I,J: Integer;
  303. Begin
  304.     With MainForm Do
  305.     Begin
  306.         IsFileCorrect := True;
  307.         Path := SaveDialog.FileName;
  308.         AssignFile(FileOut, Path);
  309.         Try
  310.             Rewrite(FileOut);
  311.         Except
  312.             IsFileCorrect := False;
  313.             MessageBox(Handle, 'Не удалось сохранить ответ в файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  314.         End;
  315.  
  316.         If IsFileCorrect then
  317.         Begin
  318.             Writeln(FileOut, 'Многоугольник задан координатами вершин:');
  319.             for I := 1 to 2 do
  320.             Begin
  321.                  for j := 0 to CoordCount do
  322.                      Write(FileOut, StringGrid.Cells [J, I]: 5);
  323.                  Writeln(FileOut);
  324.             End;
  325.             Writeln(FileOut, 'Координаты точки:' , Edit1.Text:5, Edit2.Text:5);
  326.             Writeln(FileOut, AnswerLabel.Caption);
  327.  
  328.             CloseFile(FileOut);
  329.             MessageBox(Handle, 'Сохранено успешно!', 'Сохранение', MB_OK Or MB_ICONINFORMATION);
  330.         End;
  331.     End;
  332. End;
  333. procedure TMainForm.SaveAsMenuItemClick(Sender: TObject);
  334. begin
  335.     If SaveDialog.Execute Then
  336.         SaveAnswer();
  337. end;
  338.  
  339. procedure TMainForm.SaveMenuItemClick(Sender: TObject);
  340. begin
  341.     If(SaveDialog.FileName = 'Answer') Then
  342.     Begin
  343.         If SaveDialog.Execute Then
  344.             SaveAnswer();
  345.     End
  346.     Else
  347.         SaveAnswer();
  348. end;
  349.  
  350. procedure TMainForm.StringGridExit(Sender: TObject);
  351. var
  352.     I,J: Integer;
  353.     str: String;
  354. begin
  355.     for I := 1 to StringGrid.colcount do
  356.     begin
  357.        str := StringGrid.Cells[I, 1];
  358.         j := 1;
  359.         while J <= High(str) do
  360.         begin
  361.             if str[J] = ' ' then
  362.             begin
  363.                 delete(str, j, 1);
  364.                 dec(J);
  365.             end;
  366.             inc(j);
  367.         end;
  368.         StringGrid.Cells[I, 1] := str;
  369.  
  370.         str := StringGrid.Cells[I, 2];
  371.         j := 1;
  372.         while J <= High(str) do
  373.         begin
  374.             if str[J] = ' ' then
  375.             begin
  376.                 delete(str, j, 1);
  377.                 dec(J);
  378.             end;
  379.             inc(j);
  380.         end;
  381.         StringGrid.Cells[I, 2] := str;
  382.     end;
  383. end;
  384.  
  385. procedure TMainForm.StringGridGetEditMask(Sender: TObject; ACol, ARow: Integer;
  386.   var Value: string);
  387. begin
  388.     Value := '#99';
  389. end;
  390.  
  391. procedure TMainForm.StringGridKeyPress(Sender: TObject; var Key: Char);
  392. begin
  393.     if Not(Key in ['0'..'9', #8, kMINUS]) then Key := #0;
  394. end;
  395.  
  396. procedure TMainForm.StringGridSetEditText(Sender: TObject; ACol, ARow: Integer;
  397.   const Value: string);
  398. Var
  399.     NumStr, Num:String;
  400.     IValue, I: Integer;
  401. begin
  402.     CalculateButton.Enabled := True;
  403.     EditButtonEnabled(CalculateButton);
  404.  
  405.     AnswerLabel.Caption := '';
  406.     SaveAsMenuItem.Enabled := False;
  407.     SaveMenuItem.Enabled := False;
  408. end;
  409.  
  410. Procedure EditStringGrid;
  411. Var
  412.     I: Integer;
  413. Begin
  414.     ClearStringGrid;
  415.     With MainForm.StringGrid Do
  416.     Begin
  417.         ColCount := CoordCount+1;
  418.         if CoordCount < 9 then
  419.             Width := DefaultColWidth * ColCount + 2 * ColCount - 1 - (ColCount Div 5)
  420.         else
  421.             Width  := 393;
  422.  
  423.         for I := 1 to CoordCount do
  424.             Cells[I,0] := IntToStr(I);
  425.     End;
  426. End;
  427.  
  428. //////////////////////////////// EDIT /////////////////////////////////////////
  429. procedure TMainForm.CoordCountEditChange(Sender: TObject);
  430. var
  431.     S, SBuf:String;
  432.     Num, Code, CursPos: Integer;
  433. begin
  434.     with Sender As TEdit do
  435.     Begin
  436.         S := Text;
  437.         CursPos := SelStart;
  438.  
  439.         Val(S, Num, Code);
  440.         If (Code = 0) And (Num > 0) And (Num < 21) Then
  441.         Begin
  442.             Text := IntToStr(Num);
  443.             SelStart := CursPos;
  444.         End
  445.         Else
  446.         Begin
  447.             Delete (S, SelStart, 1);
  448.             Text := S;
  449.             SelStart := CursPos-1;
  450.         End;
  451.         if Text = '0' then
  452.             Text := '';
  453.     End;
  454.  
  455.     If CheckCoordEdit(CoordCountEdit) Then
  456.     Begin
  457.         CoordCount := StrToInt(CoordCountEdit.Text);
  458.         MainForm.StringGrid.Enabled := True;
  459.     End
  460.     Else
  461.     Begin
  462.         CoordCount := 3;
  463.         MainForm.StringGrid.Enabled := False;
  464.     End;
  465.  
  466.         EditStringGrid;
  467.         EditButtonEnabled(CalculateButton);
  468.         If SaveAsMenuItem.Enabled = True then
  469.         Begin
  470.             AnswerLabel.Caption := '';
  471.             SaveAsMenuItem.Enabled := False;
  472.             SaveMenuItem.Enabled := False;
  473.         End;
  474. end;
  475.  
  476. procedure TMainForm.CoordCountEditKeyPress(Sender: TObject; var Key: Char);
  477. begin
  478.     with Sender As TEdit Do
  479.         case key of
  480.             '0'..'9':;
  481.             kBACKSPACE:;
  482.         Else
  483.             Key := kNULL;
  484.         end;
  485. end;
  486.  
  487. procedure TMainForm.EditChange(Sender: TObject);
  488. var
  489.     S:String;
  490.     Num, Code, CursPos: Integer;
  491. begin
  492.     with Sender As TEdit do
  493.     Begin
  494.         S := Text;
  495.         CursPos := SelStart;
  496.  
  497.         if Text <> '-' then
  498.         Begin
  499.             Val(S, Num, Code);
  500.             If (Code = 0) And (Num > MIN-1) And (Num < MAX+1) Then
  501.             Begin
  502.                 Text := IntToStr(Num);
  503.                 SelStart := CursPos;
  504.             End
  505.             Else
  506.             Begin
  507.                 Delete (S, SelStart, 1);
  508.                 Text := S;
  509.                 SelStart := CursPos-1;
  510.             End;
  511.         End;
  512.         EditButtonEnabled(CalculateButton);
  513.     End;
  514.  
  515.     if SaveAsMenuItem.Enabled = True then
  516.     Begin
  517.         AnswerLabel.Caption := '';
  518.         SaveAsMenuItem.Enabled := False;
  519.         SaveMenuItem.Enabled := False;
  520.     End;
  521. end;
  522.  
  523. procedure TMainForm.EditDblClick(Sender: TObject);
  524. begin
  525.     with Sender As TEdit do
  526.         Text := '';
  527. end;
  528.  
  529. procedure TMainForm.EditKeyDown(Sender: TObject; var Key: Word;
  530.   Shift: TShiftState);
  531. Begin
  532.     with MainForm, Sender As TEdit do
  533.     case key of
  534.     kENTER, kDOWN:
  535.         SelectNext(ActiveControl, True, True);
  536.     kUP:
  537.         SelectNext(ActiveControl, False, True);
  538.     kINSERT:
  539.         Key := 0;
  540.     end;
  541. End;
  542.  
  543. procedure TMainForm.EditKeyPress(Sender: TObject; var Key: Char);
  544. begin
  545.     with Sender As TEdit Do
  546.         case key of
  547.             '0'..'9':;
  548.             kBACKSPACE:;
  549.             kMINUS:;
  550.         Else
  551.             Key := kNULL;
  552.         end;
  553. end;
  554.  
  555. //////////////////////////////////// OPEN ////////////////////////////////////////
  556. Function ReadNumFromFile(Var FileIn: TextFile; Var Num: Integer): Boolean;
  557. Var
  558.     IsFileCorrect: Boolean;
  559.     NumStr: String;
  560.     Code: Integer;
  561.  
  562. Begin
  563.     Readln(FileIn, NumStr);
  564.     Val(NumStr, Num, Code);
  565.  
  566.     If Code = 0 then
  567.         IsFileCorrect := True
  568.     Else
  569.     Begin
  570.         MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  571.         IsFileCorrect := False;
  572.     End;
  573.  
  574.     If (IsFileCorrect) And ((Num < 3) Or (Num > 20)) then
  575.     Begin
  576.         MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  577.         IsFileCorrect := False;
  578.     End;
  579.  
  580.     ReadNumFromFile := IsFileCorrect;
  581. End;
  582.  
  583. Function ReadCoordFromFile(Var FileIn: TextFile; Var X: Integer; Var Y: Integer): Boolean;
  584. Var
  585.     IsFileCorrect: Boolean;
  586.     NumStr: String;
  587.     Code, I, Num: Integer;
  588.  
  589. Begin
  590.     IsFileCorrect := True;
  591.     Readln(FileIn, NumStr);
  592.  
  593.     I := 2;
  594.     Repeat
  595.         if NumStr[I] = ' ' then
  596.         Begin
  597.             Val(Copy(NumStr, 1, I-1), Num, Code);
  598.             If Code = 0 then
  599.                 IsFileCorrect := True
  600.             Else
  601.             Begin
  602.                 MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  603.                 IsFileCorrect := False;
  604.             End;
  605.  
  606.             If (IsFileCorrect) And ((Num < MIN) Or (Num > MAX)) then
  607.             Begin
  608.                 MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  609.                 IsFileCorrect := False;
  610.             End;
  611.         End;
  612.         Inc(I);
  613.     Until (NumStr[I-1] = ' ') Or Not IsFileCorrect;
  614.  
  615.     If IsFileCorrect Then
  616.     Begin
  617.         X := Num;
  618.         Val(Copy(NumStr, I, High(NumStr) - I + 1), Num, Code);
  619.         If Code = 0 then
  620.             IsFileCorrect := True
  621.         Else
  622.         Begin
  623.             MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  624.             IsFileCorrect := False;
  625.         End;
  626.  
  627.         If (IsFileCorrect) And ((Num < MIN) Or (Num > MAX)) then
  628.         Begin
  629.             MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  630.             IsFileCorrect := False;
  631.         End;
  632.  
  633.         if IsFileCorrect then
  634.             Y := Num;
  635.     End;
  636.  
  637.     ReadCoordFromFile := IsFileCorrect;
  638. End;
  639.  
  640. procedure TMainForm.OpenMenuItemClick(Sender: TObject);
  641. var
  642.     FileIn: TextFile;
  643.     Path: String;
  644.     I, X, Y: Integer;
  645.     IsFileCorrect: Boolean;
  646. begin
  647.     If OpenDialog.Execute Then
  648.     Begin
  649.         IsFileCorrect := True;
  650.         Path := OpenDialog.FileName;
  651.         AssignFile(FileIn, Path);
  652.  
  653.         Try
  654.             Reset(FileIn);
  655.         Except
  656.             IsFileCorrect := False;
  657.             MessageBox(Handle, 'Не удалось открыть файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  658.         End;
  659.  
  660.         If (IsFileCorrect) Then
  661.         Begin
  662.             IsFileCorrect := ReadNumFromFile(FileIn, CoordCount);
  663.             if IsFileCorrect then
  664.                 CoordCountEdit.Text := IntToStr(CoordCount);
  665.  
  666.             I := 0;
  667.             while IsFileCorrect And (I < CoordCount) do
  668.             Begin
  669.                 IsFileCorrect := ReadCoordFromFile(FileIn, X, Y);
  670.                 if IsFileCorrect then
  671.                 Begin
  672.                     With StringGrid do
  673.                     Begin
  674.                         Cells[I+1, 1] := IntToStr(X);
  675.                         Cells[I+1, 2] := IntToStr(Y);
  676.                     End;
  677.                 End;
  678.                 Inc(I);
  679.             End;
  680.  
  681.             If IsFileCorrect then
  682.             Begin
  683.                 IsFileCorrect := ReadCoordFromFile(FileIn, X, Y);
  684.                 If IsFileCorrect then
  685.                 Begin
  686.                     Edit1.Text := IntToStr(X);
  687.                     Edit2.Text:= IntToStr(Y);
  688.                 End;
  689.             End;
  690.  
  691.             If (IsFileCorrect) And Not EoF(FileIn) then
  692.             Begin
  693.                 IsFileCorrect := False;
  694.                 MessageBox(MainForm.Handle, 'Неверный формат данных в файле!', 'Ошибка', MB_OK Or MB_ICONERROR);
  695.             End;
  696.  
  697.             if Not IsFileCorrect then
  698.                 ResetStringGrid;
  699.  
  700.             CloseFile(FileIn);
  701.         End;
  702.     End;
  703. end;
  704. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement