Advertisement
THOMAS_SHELBY_18

Lab4_2

Feb 22nd, 2024
119
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 7.42 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.     CalculateButton: TButton;
  20.     SaveDialog: TSaveDialog;
  21.     OpenDialog: TOpenDialog;
  22.     CopyPastePopupMenu: TPopupMenu;
  23.     PasteButton: TMenuItem;
  24.     Memo: TMemo;
  25.     procedure OpenMenuItemClick(Sender: TObject);
  26.     procedure ManualMenuItemClick(Sender: TObject);
  27.     procedure AboutDeveloperMenuItemClick(Sender: TObject);
  28.     procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  29.     procedure CalculateButtonClick(Sender: TObject);
  30.     procedure CopyButtonClick(Sender: TObject);
  31.     procedure PasteButtonClick(Sender: TObject);
  32.     procedure CutButtonClick(Sender: TObject);
  33.     procedure CopyPastePopupMenuPopup(Sender: TObject);
  34.     procedure SaveAsMenuItemClick(Sender: TObject);
  35.     procedure SaveMenuItemClick(Sender: TObject);
  36.     procedure FormCreate(Sender: TObject);
  37.     procedure MemoChange(Sender: TObject);
  38.     procedure MemoKeyPress(Sender: TObject; var Key: Char);
  39.  
  40.   private
  41.     { Private declarations }
  42.   public
  43.     { Public declarations }
  44.   end;
  45.  
  46. var
  47.     MainForm: TMainForm;
  48.  
  49. implementation
  50.  
  51. {$R *.dfm}
  52.  
  53. procedure TMainForm.AboutDeveloperMenuItemClick(Sender: TObject);
  54. begin
  55.    MessageBox(Handle, 'Разработчик: Наривончик Александр Михайлович, гр. 351004', 'О разработчике', MB_OK Or MB_ICONINFORMATION);
  56. end;
  57.  
  58. Procedure EditCalculateButtonEnabled();
  59. Begin
  60.     With MainForm Do
  61.     Begin
  62.         if Memo.Text = '' then
  63.             CalculateButton.Enabled := False
  64.         Else
  65.             CalculateButton.Enabled := True;
  66.     End;
  67. End;
  68.  
  69.  
  70. procedure EditLine(Line: String);
  71. begin
  72.     if Pos('AAAA', Line) <> 0 then
  73.     begin
  74.         Delete(Line, Pos('AAAA', Line), 4);
  75.         EditLine(Line);
  76.     end
  77.     else
  78.         if Pos('ABC', Line) <> 0 then
  79.         begin
  80.             Delete(Line, Pos('ABC', Line), 3);
  81.             EditLine(Line);
  82.         end
  83.         else
  84.             if Pos('BABA', Line) <> 0 then
  85.             begin
  86.                 Delete(Line, Pos('BABA', Line), 2);
  87.                 EditLine(Line);
  88.             end
  89.             else
  90.             begin
  91.                 MainForm.Memo.Text := Line;
  92.             end;
  93. end;
  94.  
  95. procedure TMainForm.CalculateButtonClick(Sender: TObject);
  96. var
  97.     TextIn, BufText: String;
  98.     I: Integer;
  99. begin
  100.     I := 0;
  101.     TextIn := '';
  102.     Repeat
  103.         BufText := Memo.Lines[I];
  104.         TextIn := TextIn + BufText;
  105.         Inc(I);
  106.     Until I = Memo.Lines.Count;
  107.  
  108.     EditLine(TextIn);
  109.  
  110.     SaveAsMenuItem.Enabled := True;
  111.     SaveMenuItem.Enabled := True;
  112. end;
  113.  
  114. function IsTextCorrect(Text: String): Boolean;
  115. var
  116.     I: Integer;
  117.     IsCorrect: Boolean;
  118. begin
  119.     IsCorrect := True;
  120.     I := Low(Text);
  121.     while (I < High(Text)) And IsCorrect do
  122.     begin
  123.         if (Text[I] <> 'A') And (Text[I] <> 'B') And (Text[I] <> 'C') then
  124.             IsCorrect := False;
  125.         Inc(I);
  126.     end;
  127.     IsTextCorrect := IsCorrect;
  128. end;
  129.  
  130. procedure TMainForm.CopyPastePopupMenuPopup(Sender: TObject);
  131. begin
  132.     If Clipboard.HasFormat(CF_TEXT) And IsTextCorrect(Clipboard.AsText)Then
  133.         PasteButton.Enabled := True
  134.     Else
  135.         PasteButton.Enabled := False;
  136. end;
  137.  
  138. procedure TMainForm.PasteButtonClick(Sender: TObject);
  139. begin
  140.     with MainForm.Memo do
  141.     Begin
  142.         PasteFromClipboard;
  143.     End;
  144. end;
  145.  
  146. procedure TMainForm.CutButtonClick(Sender: TObject);
  147. begin
  148.     TMemo(ActiveControl).CutToClipboard;
  149. end;
  150.  
  151. procedure TMainForm.CopyButtonClick(Sender: TObject);
  152. begin
  153.     TMemo(ActiveControl).CopyToClipboard;
  154. end;
  155.  
  156. Procedure SaveAnswer ();
  157. var
  158.     IsFileCorrect: Boolean;
  159.     FileOut: TextFile;
  160.     Path: String;
  161. Begin
  162.     With MainForm Do
  163.     Begin
  164.         IsFileCorrect := True;
  165.         Path := SaveDialog.FileName;
  166.         AssignFile(FileOut, Path);
  167.         Try
  168.             Rewrite(FileOut);
  169.         Except
  170.             IsFileCorrect := False;
  171.             MessageBox(Handle, 'Не удалось сохранить ответ в файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  172.         End;
  173.  
  174.         If IsFileCorrect then
  175.         Begin
  176.             Writeln(FileOut, Memo.Text);
  177.             CloseFile(FileOut);
  178.             MessageBox(Handle, 'Сохранено успешно!', 'Сохранение', MB_OK Or MB_ICONINFORMATION);
  179.         End;
  180.     End;
  181. End;
  182.  
  183. procedure TMainForm.SaveAsMenuItemClick(Sender: TObject);
  184. begin
  185.     If SaveDialog.Execute Then
  186.         SaveAnswer();
  187. end;
  188.  
  189. procedure TMainForm.SaveMenuItemClick(Sender: TObject);
  190. begin
  191.     If(SaveDialog.FileName = 'Answer') Then
  192.     Begin
  193.         If SaveDialog.Execute Then
  194.             SaveAnswer();
  195.     End
  196.     Else
  197.         SaveAnswer();
  198. end;
  199.  
  200. procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
  201. begin
  202.     CanClose := MessageBox(Handle, 'Вы действительно хотите выйти?', 'Вы уверены?', MB_YESNO Or MB_ICONQUESTION) = IDYES;
  203. end;
  204.  
  205. procedure TMainForm.FormCreate(Sender: TObject);
  206. begin
  207.     Memo.Text := '';
  208.     Memo.TextHint := 'Введите ваш текст';
  209. end;
  210.  
  211. procedure TMainForm.ManualMenuItemClick(Sender: TObject);
  212. begin
  213.     MessageBox(Handle, '1. Введите последовательность символов А,В и С.' + #13#10 + '2. Нажмите кнопку "Обработать".' + #13#10 + '3. Получите результат!'+ #13#10 + '4. В случае ввода из файла убедитесь, что файл содержит последовательность из А,В и С.', 'Инструкция', MB_OK Or MB_ICONINFORMATION);
  214. end;
  215.  
  216. procedure TMainForm.MemoChange(Sender: TObject);
  217. begin
  218.     EditCalculateButtonEnabled;
  219.     SaveMenuItem.Enabled := False;
  220.     SaveAsMenuItem.Enabled := False;
  221. end;
  222.  
  223. procedure TMainForm.MemoKeyPress(Sender: TObject; var Key: Char);
  224. begin
  225.     case Key of
  226.         'A','B','C', #8:;
  227.     else
  228.         Key := #0;
  229.     end;
  230. end;
  231.  
  232. procedure TMainForm.OpenMenuItemClick(Sender: TObject);
  233. var
  234.     FileIn: TextFile;
  235.     Path, BufText, TextIn: String;
  236.     IsFileCorrect: Boolean;
  237. begin
  238.     If OpenDialog.Execute Then
  239.     Begin
  240.         IsFileCorrect := True;
  241.         Path := OpenDialog.FileName;
  242.         AssignFile(FileIn, Path);
  243.  
  244.         Try
  245.             Reset(FileIn);
  246.         Except
  247.             IsFileCorrect := False;
  248.             MessageBox(Handle, 'Не удалось открыть файл!', 'Ошибка', MB_OK Or MB_ICONERROR);
  249.         End;
  250.  
  251.         If (IsFileCorrect) Then
  252.         Begin
  253.             Repeat
  254.                 Readln(FileIn, BufText);
  255.                 TextIn := TextIn + BufText;
  256.             Until Eof(FileIn);
  257.  
  258.             if IsTextCorrect(TextIn) then
  259.             begin
  260.                 Memo.Text := TextIn;
  261.             end
  262.             else
  263.                 MessageBox(Handle, 'В файле должна быть последовательность из букв A,B и C!', 'Ошибка', MB_OK Or MB_ICONERROR);
  264.             CloseFile(FileIn);
  265.         End;
  266.     End;
  267. end;
  268. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement