Advertisement
lithie_oce

lab 4.2 delphi

Mar 11th, 2024
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 22.21 KB | Source Code | 0 0
  1. unit Unit2222;
  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.Menus, Vcl.StdCtrls, Clipbrd,
  8.   Vcl.Grids, Vcl.ExtCtrls;
  9.  
  10. type
  11.   TForm1 = class(TForm)
  12.     MainMenu1: TMainMenu;
  13.     N1: TMenuItem;
  14.     N3: TMenuItem;
  15.     N4: TMenuItem;
  16.     N5: TMenuItem;
  17.     OpenDialog1: TOpenDialog;
  18.     SaveDialog1: TSaveDialog;
  19.     Label1: TLabel;
  20.     Label3: TLabel;
  21.     Button1: TButton;
  22.     PopupMenu1: TPopupMenu;
  23.     N8: TMenuItem;
  24.     Label2: TLabel;
  25.     StringGrid1: TStringGrid;
  26.     N2: TMenuItem;
  27.     N6: TMenuItem;
  28.     N7: TMenuItem;
  29.     Label4: TLabel;
  30.     Edit1: TEdit;
  31.     Button2: TButton;
  32.     PopupMenu2: TPopupMenu;
  33.     N9: TMenuItem;
  34.     Bevel1: TBevel;
  35.     Shape1: TShape;
  36.     Shape2: TShape;
  37.     Label5: TLabel;
  38.     Label6: TLabel;
  39.     Label9: TLabel;
  40.     procedure N3Click(Sender: TObject);
  41.     procedure N5Click(Sender: TObject);
  42.     procedure N4Click(Sender: TObject);
  43.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  44.     procedure Button1Click(Sender: TObject);
  45.     procedure StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  46.       Shift: TShiftState; X, Y: Integer);
  47.     procedure N8Click(Sender: TObject);
  48.     procedure Button2Click(Sender: TObject);
  49.     procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  50.       Rect: TRect; State: TGridDrawState);
  51.     procedure N6Click(Sender: TObject);
  52.     procedure N7Click(Sender: TObject);
  53.     procedure Edit1Change(Sender: TObject);
  54.     procedure Edit1KeyPress(Sender: TObject; var Key: Char);
  55.     procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
  56.     procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  57.       const Value: string);
  58.     procedure FormCreate(Sender: TObject);
  59.     procedure N2Click(Sender: TObject);
  60.     procedure Edit1KeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
  61.     procedure StringGrid1Exit(Sender: TObject);
  62.     procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
  63.       var Value: string);
  64.     procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  65.       var CanSelect: Boolean);
  66.     function FormHelp(Command: Word; Data: NativeInt;
  67.       var CallHelp: Boolean): Boolean;
  68.   private
  69.     { Private declarations }
  70.   public
  71.     { Public declarations }
  72.   end;
  73. Type
  74.     TArr = Array Of Integer;
  75. Const
  76.     EnabledKeys =  ['0'..'9', #8];
  77. var
  78.   Form1: TForm1;
  79.   SaveResult : TModalResult;
  80.   OutputFile, InputFile: TextFile;
  81.   IsOkay, HasBeenSaved: Boolean;
  82.  
  83. implementation
  84.  
  85. {$R *.dfm}
  86.  
  87. procedure TForm1.N2Click(Sender: TObject);
  88. Var
  89.     StrNum, StrMark: String;
  90.     Num, I, Mark: Integer;
  91.     IsCorrect, IsEnough, IsInRange: Boolean;
  92. begin
  93.     OpenDialog1:= TOpenDialog.Create(self);
  94.     OpenDialog1.InitialDir := GetCurrentDir;
  95.     OpenDialog1.Filter := 'Text file|*.txt';
  96.     OpenDialog1.DefaultExt := 'txt';
  97.     OpenDialog1.FileName := 'InputFileForm';
  98.     with CreateMessageDialog('Файл должен иметь расширение .txt и быть открытым для чтения.'+#13#10+'Данные в файле должны быть представлены следующим образом:'+#13#10+'Первое число: число элементов.'+#13#10+'На следующей строке(-ах) находятся элементы, разделенные пробелом(-ами) или концом строки.'+#13#10+'После последнего элемента не должно быть никаких символов.', mtCustom, [mbOK], mbOK) do
  99.     begin
  100.         Caption := 'Инструкция';
  101.         ShowModal;
  102.     end;
  103.     if OpenDialog1.Execute then
  104.     begin
  105.         if FileExists(OpenDialog1.FileName) then
  106.         Begin
  107.             AssignFile(InputFile, OpenDialog1.FileName);
  108.             IsCorrect := True;
  109.             IsEnough := True;
  110.             IsInRange := True;
  111.             try
  112.                 Reset(InputFile);
  113.             except
  114.                 ShowMessage('Файл закрыт для чтения.');
  115.                 IsCorrect := False;
  116.             end;
  117.             if IsCorrect then
  118.             Begin
  119.                 Try
  120.                     Read(InputFile, Num);
  121.                 Except
  122.                     IsCorrect := False;
  123.                     ShowMessage('Количество элементов должно быть числом.');
  124.                 End;
  125.                 If IsCorrect And ((Num < 2) Or (Num > 40)) Then
  126.                 Begin
  127.                         IsCorrect := False;
  128.                         ShowMessage('Количество элементов должно быть от 2 до 40.');
  129.                 End;
  130.                 if IsCorrect then
  131.                 Begin
  132.                     Edit1.Text := IntToStr(Num);
  133.                     StringGrid1.ColCount := Num;
  134.                     For I := 0 To StringGrid1.ColCount-1 Do
  135.                     Begin
  136.                         if Not(Eof(InputFile)) then
  137.                         Begin
  138.                             Try
  139.                                 Read(InputFile, Mark);
  140.                             Except
  141.                                 IsCorrect := False;
  142.                             End;
  143.                             if IsCorrect And ((Mark > -1000) And (Mark < 10000)) then
  144.                             Begin
  145.                                 StrMark := IntToStr(Mark);
  146.                                 StringGrid1.Cells[I, 0] := StrMark;
  147.                             End
  148.                             Else
  149.                             Begin
  150.                                 if IsCorrect then
  151.                                     IsInRange := False;
  152.                             End
  153.                         End
  154.                         Else
  155.                             IsEnough := False;
  156.                     End;
  157.                 End;
  158.                 if Not(IsCorrect) then
  159.                     ShowMessage('В файле есть не-число.');
  160.                 if Not(IsInRange) then
  161.                 Begin
  162.                     ShowMessage('В файле есть число, не входящее в диапазон допустимых значений.');
  163.                     IsCorrect := False;
  164.                 End;
  165.                 if Not(EoF(InputFile)) then
  166.                 Begin
  167.                     IsCorrect := False;
  168.                     ShowMessage('В файле находятся лишние данные.');
  169.                 End;
  170.                 if Not(IsEnough) then
  171.                 Begin
  172.                     ShowMessage('В файле не хватает данных.');
  173.                     IsCorrect := False;
  174.                 End;
  175.             End;
  176.             if IsCorrect then
  177.             Begin
  178.                 IsOkay := True;
  179.                 StringGrid1.Visible := True;
  180.                 Label2.Visible := True;
  181.                 StringGrid1.Visible := True;
  182.                 Bevel1.Visible := True;
  183.                 Label5.Visible := True;
  184.                 Label6.Visible := True;
  185.                 Shape1.Visible := True;
  186.                 Shape2.Visible := True;
  187.                 Button2.Visible := True;
  188.                 Button2.Enabled := True;
  189.             End
  190.             Else
  191.             Begin
  192.                 StringGrid1.Rows[0].Clear;
  193.                 Button2.Enabled := False;
  194.             End;
  195.             CloseFile(InputFile);
  196.         End
  197.         Else
  198.             ShowMessage('Файл с таким именем не существует.');
  199.         OpenDialog1.Free;
  200.     End
  201.     Else
  202.         ShowMessage('Открытие файла было отменено.');
  203. end;
  204.  
  205. procedure TForm1.N3Click(Sender: TObject);
  206. Var
  207.     Result: String;
  208. begin
  209.         SaveDialog1 := TSaveDialog.Create(self);
  210.         SaveDialog1.InitialDir := GetCurrentDir;
  211.         SaveDialog1.FileName := 'FormSave1';
  212.         SaveDialog1.Filter := 'Text file|*.txt';
  213.         SaveDialog1.DefaultExt := 'txt';
  214.         if (StringGrid1.Visible) then
  215.             if saveDialog1.Execute then
  216.             begin
  217.                 if FileExists(SaveDialog1.FileName) then
  218.                     ShowMessage('Файл с таким именем уже существует, поэтому он будет перезаписан.');
  219.                 AssignFile(OutputFile, SaveDialog1.FileName);
  220.                 Rewrite(OutputFile);
  221.                 Result := Label9.Caption;
  222.                 Write(OutputFile, Result);
  223.                 CloseFile(OutputFile);
  224.                 ShowMessage('Сохранение прошло успешно.');
  225.                 HasBeenSaved := True;
  226.             end
  227.             else
  228.             Begin
  229.                 ShowMessage('Сохраниение файла было отменено.');
  230.                 SaveDialog1.Free;
  231.             End
  232.         else
  233.             ShowMessage('Нечего сохранять.');
  234. end;
  235.  
  236. procedure TForm1.N4Click(Sender: TObject);
  237. begin
  238.     with CreateMessageDialog('Эта программа получает наибольший элемент, используя рекурсию.' + #13#10 +'В первое поле необходимо ввести натуральное число от 2 до 40 и нажать кнопку "Получить".'+ #13#10 + 'В появившейся таблице заполните каждую ячейку элементом: числом от -9999 до 9999.' + #13#10 + 'Обратите внимание на цвет ячеек.' + #13#10 + 'Чтобы увидеть результат, нажмите кнопку "Получить".', mtCustom, [mbOK], mbOK) do
  239.     begin
  240.         Caption := 'Инструкция';
  241.         ShowModal;
  242.     end;
  243. end;
  244.  
  245. procedure TForm1.N5Click(Sender: TObject);
  246. begin
  247.     with CreateMessageDialog('Разработала Лутай В.В., гр. 351003.', mtCustom, [mbOK], mbOK) do
  248.     begin
  249.         Caption := 'О разработчице.';
  250.         ShowModal;
  251.     end;
  252. end;
  253.  
  254. procedure TForm1.N6Click(Sender: TObject);
  255. Var
  256.     Num: Integer;
  257.     IsCorrect: Boolean;
  258.     Str: String;
  259. begin
  260.     Str := Clipboard.AsText;
  261.     While  (Length(Str) > 1) And (Str[1] = '0') Do
  262.         Delete(Str, 1, 1);
  263.     if (Str = '-0') then
  264.         Str := '0';
  265.     IsCorrect := True;
  266.     Try
  267.         Num := StrToInt(Str);
  268.     Except
  269.         On E: EConvertError Do
  270.         Begin
  271.             ShowMessage('В буфере находится объект, не являющийся числом.');
  272.             IsCorrect := False;
  273.         End;
  274.     End;
  275.     if IsCorrect then
  276.     Begin
  277.         if ActiveControl is TStringGrid then
  278.             if (Num > -1000) And (Num < 10000) then
  279.                 StringGrid1.Cells[StringGrid1.Col,   StringGrid1.Row] := Str
  280.             Else
  281.                 IsCorrect := False
  282.         Else
  283.             if (Num < 41) And (Num > 1) then
  284.                 Edit1.Text := Str
  285.             Else
  286.                 IsCorrect := False;
  287.         if Not(IsCorrect) then
  288.             ShowMessage('В буфере находится число, которое не входит в диапазон допустимых значений.');
  289.     End;
  290. end;
  291.  
  292. procedure TForm1.N7Click(Sender: TObject);
  293. Var
  294.     ACol, ARow: Integer;
  295. begin
  296.     ClipBoard.AsText := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
  297.     StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row] := '';
  298. end;
  299.  
  300. procedure TForm1.N8Click(Sender: TObject);
  301. Var
  302.     ACol, ARow: Integer;
  303. begin
  304.        Clipboard.AsText := StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];
  305. end;
  306.  
  307. procedure TForm1.StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;
  308.   Rect: TRect; State: TGridDrawState);
  309. Const
  310.     clWebLightPink = TColor($C1B6FF);
  311.     clWebDarkMagenta = TColor($8B008B);
  312.     clWebMediumVioletRed = TColor($9314FF);
  313. Var
  314.     Mark: Integer;
  315.     IsFilled, IsCorrect, IsAMark: Boolean;
  316. begin
  317.     IsCorrect := True;
  318.     Try
  319.         Mark := StrToInt(StringGrid1.Cells[ACol, ARow]);
  320.     Except
  321.         IsCorrect := False;
  322.     End;
  323.         if (StringGrid1.Cells[ACol, ARow] = '') then
  324.         Begin
  325.             StringGrid1.Canvas.Brush.Color := clWebLightPink;
  326.             StringGrid1.Canvas.FillRect(Rect);
  327.             StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  328.         End
  329.         Else
  330.             (*if Not(IsCorrect) then
  331.             Begin
  332.                 StringGrid1.Canvas.Brush.Color := clWebDarkMagenta;
  333.                 StringGrid1.Canvas.FillRect(Rect);
  334.                 StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  335.             end
  336.             Else
  337.                 if (IsCorrect And ((Mark < -999) Or (Mark > 9999))) then
  338.                 Begin
  339.                     StringGrid1.Canvas.Brush.Color := clWebMediumVioletRed;
  340.                     StringGrid1.Canvas.FillRect(Rect);
  341.                     StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  342.                 End
  343.                 Else  *)
  344.                 Begin
  345.                     StringGrid1.Canvas.Brush.Color := RGB(255, 251, 251);
  346.                     StringGrid1.Canvas.FillRect(Rect);
  347.                     StringGrid1.Canvas.TextOut(Rect.Left, Rect.Top, StringGrid1.Cells[ACol, ARow]);
  348.                 End;
  349. end;
  350.  
  351. procedure TForm1.StringGrid1Exit(Sender: TObject);
  352. Var
  353.     Str: String;
  354.     J, K: Integer;
  355. begin
  356.     With StringGrid1 Do
  357.     for K := 0 to ColCount-1 do
  358.     Begin
  359.         Str := Cells[K,0];
  360.         j := 1;
  361.         while J <= High(Str) do
  362.         Begin
  363.             if str[j] = ' ' then
  364.             Begin
  365.                 Delete(Str, J, 1);
  366.                 Dec(j);
  367.             End;
  368.             Inc(j);
  369.         End;
  370.         if (Str = '-0') then
  371.             StringGrid1.Cells[K, 0] := '0'
  372.         Else
  373.             Cells[K, 0] := Str;
  374.     End;
  375. end;
  376.  
  377. procedure TForm1.StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;
  378.   var Value: string);
  379. begin
  380.     Value := '#999';
  381. end;
  382.  
  383. procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
  384. Var
  385.     ACol, Arow: Integer;
  386. begin
  387.     if Not(Key in EnabledKeys) And Not (Key = '-')  Or ((Length(Trim(StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row])) >= 1) And (StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row][1]='0')) then
  388.         Key := #0;
  389. end;
  390.  
  391. procedure TForm1.StringGrid1MouseDown(Sender: TObject; Button: TMouseButton;
  392.   Shift: TShiftState; X, Y: Integer);
  393. Var
  394.     ACol, ARow: Integer;
  395. begin
  396.     if Button = mbRight then
  397.     Begin
  398.         StringGrid1.MouseToCell(X, Y, ACol, ARow);
  399.         StringGrid1.Col:=ACol;
  400.         StringGrid1.Row:=ARow;
  401.         Popupmenu1.Popup(X+GetClientOrigin.X+StringGrid1.Left, Y+GetClientOrigin.Y+StringGrid1.Top);
  402.     End;
  403. end;
  404.  
  405. procedure TForm1.StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;
  406.   var CanSelect: Boolean);
  407. Var
  408.     Str: String;
  409.     J, K: Integer;
  410. begin
  411.     With StringGrid1 Do
  412.     for K := 0 to ColCount-1 do
  413.     Begin
  414.         Str := Cells[K,0];
  415.         j := 1;
  416.         while J <= High(Str) do
  417.         Begin
  418.             if str[j] = ' ' then
  419.             Begin
  420.                 Delete(Str, J, 1);
  421.                 Dec(j);
  422.             End;
  423.             Inc(j);
  424.         End;
  425.         if (Str = '-0') then
  426.             StringGrid1.Cells[K, 0] := '0'
  427.         Else
  428.             if Str = '-' then
  429.                 Cells[K, 0] := ''
  430.             Else
  431.                 Cells[K, 0] := Str;
  432.     End;
  433. end;
  434.  
  435. procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;
  436.   const Value: string);
  437. Var
  438.     I, Mark, Pos: Integer;
  439.     P: TPoint;
  440.     Str: String;
  441. begin
  442.     IsOkay := True;
  443.     Label9.Visible := False;
  444.     N3.Enabled := False;
  445.     Button2.Enabled := False;
  446.     Label3.Visible := False;
  447.     if (Length(Trim(StringGrid1.Cells[ACol, ARow])) > 1) And (StringGrid1.Cells[ACol, ARow][1] = '-') then
  448.         Pos := 2
  449.     Else
  450.         Pos := 1;
  451.     While  (Length(Trim(StringGrid1.Cells[ACol, ARow])) > Pos) And (Trim(StringGrid1.Cells[ACol, ARow][Pos]) = '0') Do
  452.     Begin
  453.         Str := Trim(StringGrid1.Cells[ACol, ARow]);
  454.         Delete(Str, Pos, 1);
  455.         StringGrid1.Cells[ACol, ARow] := Str;
  456.     End;
  457.         With StringGrid1 Do
  458.     if (Trim(StringGrid1.Cells[ACol, ARow]) = '-0') then
  459.         StringGrid1.Cells[ACol, ARow] := '0';
  460.     for I := 0 to (StringGrid1.ColCount-1) do
  461.     Begin
  462.         if (Trim(StringGrid1.Cells[I, 0]) = '') Or (Trim(StringGrid1.Cells[I, 0]) = '-') then
  463.             IsOkay := False
  464.         Else
  465.         Begin
  466.             Try
  467.                 Mark := StrToInt(Trim(StringGrid1.Cells[I, 0]));
  468.             Except
  469.                 IsOkay := False;
  470.             End;
  471.             if IsOkay then
  472.                 if (Mark > 9999) Or (Mark < -999) then
  473.                     IsOkay := False;
  474.         End;
  475.     End;
  476.     if IsOkay then
  477.         Button2.Enabled := True
  478.     Else
  479.         Button2.Enabled := False;
  480. end;
  481.  
  482. procedure TForm1.Button1Click(Sender: TObject);
  483. Var
  484.     Num: Integer;
  485.     IsCorrect: Boolean;
  486. begin
  487.     IsCorrect := True;
  488.     Try
  489.         Num := StrToInt(Edit1.Text);
  490.     Except
  491.         IsCorrect := False;
  492.         ShowMessage('Введенное значение не соответствует формату.');
  493.     End;
  494.     if IsCorrect And (Num > 1) And (Num < 41)  then
  495.     Begin
  496.         Label2.Visible := True;
  497.         StringGrid1.ColCount := Num;
  498.         StringGrid1.Visible := True;
  499.         Bevel1.Visible := True;
  500.         Label5.Visible := True;
  501.         Label6.Visible := True;
  502.         Shape1.Visible := True;
  503.         Shape2.Visible := True;
  504.         Button2.Visible := True;
  505.     End
  506.     Else
  507.         ShowMessage('Введенное число не входит в диапазон допустимых значений.');
  508. end;
  509.  
  510. Function FindMax(Arr: TArr; Max, I: Integer): Integer;
  511. Begin
  512.     if I = -1 then
  513.         Result := Max
  514.     Else
  515.         if Max < Arr[I] then
  516.         Begin
  517.             Max := Arr[I];
  518.             Result := FindMax(Arr, Arr[I], I-1);
  519.         End
  520.         Else
  521.             Result := FindMax(Arr, Max, I-1);
  522.  
  523.  
  524. End;
  525.  
  526. procedure TForm1.Button2Click(Sender: TObject);
  527. Var
  528.     Max, I: Integer;
  529.     Arr: TArr;
  530. begin
  531.     if IsOkay then
  532.     Begin
  533.         With StringGrid1 Do
  534.         Begin
  535.             SetLength(Arr, ColCount);
  536.             for I := 0 to ColCount-1 do
  537.                 Arr[I] := StrToInt(Cells[I, 0]);
  538.             Max := FindMax(Arr, Arr[High(Arr)], High(Arr));
  539.         End;
  540.         Label3.Visible := True;
  541.         Label9.Caption := IntToStr(Max);
  542.         Label9.Visible := True;
  543.         N3.Enabled := True;
  544.     End
  545.     Else
  546.     Begin
  547.         Label9.Visible := False;
  548.         Label3.Visible := False;
  549.         N3.Enabled := False;
  550.         ShowMessage('Перепроверьте введенные данные.');
  551.     End;
  552.  
  553. end;
  554.  
  555. procedure TForm1.Edit1Change(Sender: TObject);
  556. begin
  557.     if (Length(Edit1.Text) = 0) then
  558.     Begin
  559.        Button1.Enabled := False;
  560.        Button2.Enabled := False;
  561.     End
  562.     Else
  563.         if (StrToInt(Edit1.Text) > 1) And (StrToInt(Edit1.Text) < 41) then
  564.             Button1.Enabled := True
  565.         Else
  566.             Button1.Enabled := False;
  567.     HasBeenSaved := False;
  568.     StringGrid1.Rows[0].Clear;
  569.     Label9.Caption := '';
  570.     Label9.Visible := False;
  571.     Label3.Visible := False;
  572.     N3.Enabled := False;
  573. end;
  574.  
  575. procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  576.   Shift: TShiftState);
  577. begin
  578. TEdit(Sender).ReadOnly := ((Shift=[ssShift]) Or (Shift=[ssCtrl]))
  579. end;
  580.  
  581.  
  582. procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
  583. begin
  584.     if Not (Key in EnabledKeys) Or ((Length(Edit1.Text)=0) And (Key = '0')) then
  585.         Key := #0
  586.     Else
  587.         if (Length(Edit1.Text) = 1) And ((Edit1.Selstart = 0) And (Key <> #8) And (StrToInt(Key+Edit1.Text) > 40) Or (Edit1.Selstart = 1) And Not(Key = #8) And ((StrToInt(Edit1.Text+Key)) > 40)) then
  588.             Key := #0;
  589. end;
  590.  
  591. procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  592. Var
  593.     Result: String;
  594. begin
  595.     if Not(HasBeenSaved) And (Label9.Caption <> '') then
  596.     with CreateMessageDialog('Вы не сохранили результат. Хотите сохранить?', mtWarning, [mbYes, mbNo]) do
  597.     begin
  598.         Caption := 'Запрос на выход';
  599.         (FindComponent('Yes') as TButton).Caption := 'Да';
  600.         (FindComponent('No') as TButton).Caption := 'Нет';
  601.         ShowModal;
  602.         if ModalResult = mrYes then
  603.         Begin
  604.             SaveDialog1 := TSaveDialog.Create(self);
  605.             SaveDialog1.InitialDir := GetCurrentDir;
  606.             SaveDialog1.FileName := 'FormSave1';
  607.             SaveDialog1.Filter := 'Text file|*.txt';
  608.             SaveDialog1.DefaultExt := 'txt';
  609.             if saveDialog1.Execute then
  610.             begin
  611.                 if FileExists(SaveDialog1.FileName) then
  612.                     ShowMessage('Файл с таким именем уже существует, поэтому он будет перезаписан.');
  613.                 AssignFile(OutputFile, SaveDialog1.FileName);
  614.                 Rewrite(OutputFile);
  615.                 Result := Label9.Caption;
  616.                 Write(OutputFile, Result);
  617.                 CloseFile(OutputFile);
  618.                 SaveDialog1.Free;
  619.                 Application.Terminate;
  620.             end
  621.             else
  622.             Begin
  623.                 ShowMessage('Сохраниение файла было отменено.');
  624.                 CanClose := False;
  625.             End;
  626.         End
  627.         Else
  628.             if ModalResult = mrNo then
  629.                 Application.Terminate
  630.             else
  631.             CanClose := False;
  632.     End
  633.     Else
  634.     with CreateMessageDialog('Вы точно хотите выйти?', mtWarning, [mbYes, mbNo]) do
  635.     begin
  636.         Caption := 'Запрос на выход';
  637.         (FindComponent('Yes') as TButton).Caption := 'Да';
  638.         (FindComponent('No') as TButton).Caption := 'Нет';
  639.         ShowModal;
  640.         if ModalResult = mrYes then
  641.             Application.Terminate
  642.         Else
  643.             CanClose := False;
  644.     End;
  645. end;
  646.  
  647. procedure TForm1.FormCreate(Sender: TObject);
  648. begin
  649.     HasBeenSaved := False;
  650. end;
  651. function TForm1.FormHelp(Command: Word; Data: NativeInt;
  652.   var CallHelp: Boolean): Boolean;
  653. begin
  654.     CallHelp := False;
  655. end;
  656.  
  657. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement