Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2019
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 27.13 KB | None | 0 0
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
  9.   StdCtrls, Menus;
  10.  
  11. type
  12.  
  13.   { TForm1 }
  14.  
  15.   TForm1 = class(TForm)
  16.     Label1: TLabel;
  17.     Label2: TLabel;
  18.     MainMenu1: TMainMenu;
  19.     miDelAll: TMenuItem;
  20.     miProv: TMenuItem;
  21.     miZapoln: TMenuItem;
  22.     miZapBG: TMenuItem;
  23.     miZapSpr: TMenuItem;
  24.     miZapMuz: TMenuItem;
  25.     miRed: TMenuItem;
  26.     miPlus: TMenuItem;
  27.     miMinus: TMenuItem;
  28.     miCreate: TMenuItem;
  29.     miOpen: TMenuItem;
  30.     miClose: TMenuItem;
  31.     miSave: TMenuItem;
  32.     miSaveAs: TMenuItem;
  33.     miExit: TMenuItem;
  34.     miFile: TMenuItem;
  35.     OpenDialog1: TOpenDialog;
  36.     SaveDialog1: TSaveDialog;
  37.     StringGrid1: TStringGrid;
  38.     procedure FormCreate(Sender: TObject);
  39.     procedure miDelAllClick(Sender: TObject);
  40.     procedure miProvClick(Sender: TObject);
  41.     procedure miCloseClick(Sender: TObject);
  42.     procedure miCreateClick(Sender: TObject);
  43.     procedure miExitClick(Sender: TObject);
  44.     procedure miMinusClick(Sender: TObject);
  45.     procedure miOpenClick(Sender: TObject);
  46.     procedure miPlusClick(Sender: TObject);
  47.     procedure miRedClick(Sender: TObject);
  48.     procedure miSaveAsClick(Sender: TObject);
  49.     procedure miSaveClick(Sender: TObject);
  50.     procedure miZapBGClick(Sender: TObject);
  51.     procedure miZapMuzClick(Sender: TObject);
  52.     procedure miZapSprClick(Sender: TObject);
  53.   private
  54.  
  55.   public
  56.  
  57.   end;
  58.  
  59. var
  60.   Form1: TForm1;
  61.  
  62. implementation
  63.  
  64. {$R *.lfm}
  65.  
  66. Type
  67.   Data=Record
  68.      SpcT:integer;
  69.      SpcP:integer;
  70.     Name:string[30];
  71.     Text:string[255];
  72.       BG:string[20];
  73.      Spr:string[20];
  74.      Muz:string[30];
  75.      Ext:string[30];
  76.   end;
  77.  
  78. // Глобальные переменные
  79. var sf: string; // Спецификация файла - его полное имя
  80.   Error01,Error02,Error03,Error04,Error05,Error06,Error07,Error08:boolean; // флаги ошибок
  81.   ErrorTest,NotErrors:boolean;  // проводилась проверка или нет/есть ошибки или нет
  82.  
  83.   { TForm1 }
  84.  
  85. procedure TabForFile;
  86. var i,j: integer;
  87. begin
  88.   // Используем менеджер контекста для сокращения,
  89.   // чтобы слишком часто не писать длинную строчку для доступа к атрибуту
  90.   // По типу Form1.Stringgrid1.attr, как бы считаем что мы внутри StringGrid1
  91.   // И Можем не указывать полное имя, чтобы поменять что-то внутри
  92.   with Form1.StringGrid1 do
  93.     begin
  94.  
  95.       ColCount := 9;  // Число столбцов
  96.       RowCount := 11; // Количество строк
  97.  
  98.       // Устанавливаем ширину отдельных ячеек
  99.       // Столбцы (как почти и всё) нумеруются с нуля!!!
  100.       ColWidths[0] := 30;   // Номер
  101.       ColWidths[1] := 40;   // SpcT   -  ОСОБЫЙ КОД текста
  102.       ColWidths[2] := 40;   // SpcP   -  ОСОБЫЙ КОД картинки
  103.       ColWidths[3] := 120;  // Name  -  Имя
  104.       ColWidths[4] := 840;  // Text  -  Текст
  105.       ColWidths[5] := 100;  // BG    -  Ссылка BG
  106.       ColWidths[6] := 100;  // Spr   -  Ссылка Spr
  107.       ColWidths[7] := 100;  // Muz   -  Ссылка Muz
  108.       ColWidths[8] := 100;  // Запасной столбец, чтобы если понадобится не изменять кодировку файлов
  109.  
  110.       // Заполняем заголовок нашей таблицы
  111.       Cells[0,0] := '№';
  112.       Cells[1,0] := 'SpcT';
  113.       Cells[2,0] := 'SpcP';
  114.       Cells[3,0] := 'Name';
  115.       Cells[4,0] := 'Text';
  116.       Cells[5,0] := 'BG';
  117.       Cells[6,0] := 'Spr';
  118.       Cells[7,0] := 'Muz';
  119.       Cells[8,0] := 'Extra';
  120.  
  121.       for j:=1 to RowCount-1 do
  122.         begin
  123.           Cells[0,j] := IntToStr(j);
  124.           Cells[1,j] := '0';
  125.           Cells[2,j] := '0';
  126.         end;
  127.  
  128.       // Теперь устанавливаем ширину всей таблицы
  129.       width := 25; // дополнительные 25 пикселей на полосу прокрути и прочее
  130.       for i:=0 to ColCount-1 do
  131.         width:= width + ColWidths[i]; // Прибавляем ширину i-го столбца к общей ширине таблицы
  132.       Height:=600;
  133.     end;
  134. end;
  135.  
  136. // Процедура очищения таблицы (без заголовка)
  137. // StringGrid1.Clean - очищает всю таблицу
  138. Procedure ClearTab;
  139. var i, j,k: integer;
  140. begin
  141.   with Form1.StringGrid1 do
  142.   // Перебираем все строки кроме заголока
  143.   for i:= 1 to RowCount -1 do
  144.     // Не имеет смысла очищать строку если она пустая
  145.     // Здесь проблема в том, что ячейка 'Номер' может быть пуста и в то же время
  146.     // в ячейке 'Фамилия' Может быть заполнена
  147.     // Но это НЕ ЗНАЧИТ, что всегда будут проверятся ВСЕ ячейки
  148.     // Данное выражение вернёт сразу True, когда хотябы одно утвердение вернёт True(в первый раз)
  149.     if (CellS[0,i] <>'') or (CellS[1,i] <>'') or (CellS[2,i] <>'') or (CellS[3,i] <>'') or (CellS[4,i] <>'') or (CellS[5,i] <>'') or (CellS[6,i] <>'') or (CellS[7,i] <>'') or (CellS[8,i] <>'')  then
  150.       // Перебираем все столбцы
  151.       for j:=0 to ColCount-1 do
  152.         begin
  153.           Cells[j,i] :=''; // 'обнуляем'нужные ячейки
  154.         end;
  155.  
  156.   with Form1.StringGrid1 do
  157.     for k:=1 to RowCount-1 do
  158.       begin
  159.         Cells[0,k] := IntToStr(k);
  160.         Cells[1,k] := '0';
  161.         Cells[2,k] := '0';
  162.       end;
  163.   ErrorTest:=false;
  164.   Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
  165.                       'Длина всего текста: '+#13+'Частота смены окружения: ';
  166.  
  167. end;
  168.  
  169.  
  170.  
  171. procedure SaveToFileOfData;
  172. var f: file of Data;
  173.     s: Data;
  174.     i: integer;
  175. begin
  176.  
  177.   // Стандартные действия по подготовке к записи в файл
  178.   AssignFile(f, sf);
  179.   Rewrite(f);
  180.  
  181.   with Form1.StringGrid1 do
  182.     // Перебираем строки
  183.     // Причём начинаем с 1, тк на 0 месте строка ЗАГОЛОВКА
  184.     for i:=1 to RowCount -1 do
  185.       // Перебираем НЕ ПУСТЫЕ строки
  186.       if CellS[0,i] <>'' then
  187.         begin
  188.  
  189.           // Записываем в s нужные поля, кто он, где учится, как учится и тп
  190.           s.SpcT  := StrToInt(Cells[1,i]);
  191.           s.SpcP  := StrToInt(Cells[2,i]);
  192.           s.Name := Cells[3,i];
  193.           s.Text := Cells[4,i];
  194.           s.BG   := Cells[5,i];
  195.           s.Spr  := Cells[6,i];
  196.           s.Muz  := Cells[7,i];
  197.           s.Ext  := Cells[8,i];
  198.  
  199.           // Полученного студента записываем в файл
  200.           write(f,s);
  201.         end;
  202. // в самом конце закрываем файл
  203. closefile(f);
  204. end;
  205.  
  206. // Загрузить данные в таблицу из файла
  207. procedure LoadFromFileOfData;
  208. var f: file of Data;
  209.     s: Data; // Переменная для ЗАПИСИ В StringGrid1 одного студента и считывание его из файла
  210.     i: integer;
  211. begin
  212.  
  213.   // Подготавливаем файл к чтению
  214.   AssignFile(f, sf);
  215.   Reset(f);
  216.  
  217.   with Form1.StringGrid1 do
  218.     begin
  219.       RowCount:=filesize(f)+1;
  220.  
  221.       for i:=1 to filesize(f) do
  222.       begin
  223.  
  224.         // Считываем одного студента
  225.         read(f,s);
  226.  
  227.         // И записываем данные о нём в таблицу
  228.         Cells[0,i]:= IntToStr(i);
  229.         Cells[1,i]:= IntToStr(s.SpcT);
  230.         Cells[2,i]:= IntToStr(s.SpcP);
  231.         Cells[3,i]:= s.Name;
  232.         Cells[4,i]:= s.Text;
  233.         Cells[5,i]:= s.BG;
  234.         Cells[6,i]:= s.Spr;
  235.         Cells[7,i]:= s.Muz;
  236.         Cells[8,i]:= s.Ext;
  237.       end;
  238.     end;
  239. // и в самом конце закрываем файл
  240. closefile(f);
  241.  
  242. ErrorTest:=false;
  243. Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
  244.                     'Длина всего текста: '+#13+'Частота смены окружения: ';
  245. Form1.Label2.Caption:=#13+'Тест ошибок не проводился';
  246. end;
  247.  
  248.  
  249. procedure TForm1.FormCreate(Sender: TObject);
  250. begin
  251.   TabForFile; // Устанавливаем параметры таблицы по умолчанию
  252.   // Добавляем оциию редактирования содержимого таблицы
  253.   StringGrid1.Options:=StringGrid1.Options + [goEditing];
  254.   StringGrid1.FixedCols:=0; //Чтобы можно было редактировать номера
  255.   StringGrid1.Modified := False;
  256.   sf := '';   // Никакого файла мы ещё не открывали
  257.  
  258.   //Form1.Width:=Form1.StringGrid1.Width;
  259.   Form1.Width:=1485;
  260.   //Form1.Height:=Form1.StringGrid1.Height+120;
  261.   Form1.Height:=720;
  262.  
  263.   // Каталоги для сохраненияи открытия по умочанию (Папка проекта)
  264.   OpenDialog1.InitialDir:='';
  265.   SaveDialog1.InitialDir:='';
  266.  
  267.   NotErrors:=false;
  268.   ErrorTest:=false;
  269.  
  270.   Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
  271.                       'Длина всего текста: '+#13+'Частота смены окружения: ';
  272.   Form1.Label2.Caption:=#13+'Тест ошибок не проводился';
  273. end;
  274.  
  275. procedure TForm1.miDelAllClick(Sender: TObject);
  276. var n:integer;
  277. begin
  278.   with Form1.StringGrid1 do
  279.     begin
  280.       n:=0;
  281.       while (CellS[1,RowCount-1] ='0') and (CellS[2,RowCount-1] ='0') and (CellS[3,RowCount-1] ='') and (CellS[4,RowCount-1] ='') and
  282.                     (CellS[5,RowCount-1] ='') and (CellS[6,RowCount-1] ='') and (CellS[7,RowCount-1] ='') and (CellS[8,RowCount-1] ='')  do
  283.         begin
  284.           RowCount := RowCount -1;
  285.           n+=1;
  286.         end;
  287.  
  288.     if n=0 then
  289.       case MessageDlg('Пустых строк не обнаружено', mtConfirmation,[mbYes],0) of
  290.         mrYes:;
  291.       end
  292.     else
  293.       case MessageDlg('Удалено '+IntToStr(n)+' пустых строк', mtConfirmation,[mbYes],0) of
  294.         mrYes:;
  295.       end;
  296.   end;
  297. end;
  298.  
  299. procedure TForm1.miProvClick(Sender: TObject);
  300. var                                  i,j,k,o,p,q:integer;
  301.            Er1, Er2, Er3, Er4, Er5, Er6, Er7,Er8:string;
  302.                          E1,E2,E3,E4,E5,E6,E7,E8:string;
  303. SpaceText,SpaceLink,ExtEr,TooMuchText,SumOfTexts:boolean;
  304.                     Inf2, Inf3, InfB, InfS, InfM:integer;
  305.                  Inform1,Inform2,Inform3,Inform4:string;
  306.  
  307. begin
  308.   SpaceText:=false;
  309.   SpaceLink:=false;
  310.   ExtEr:=false;
  311.   TooMuchText:=false;
  312.   SumOfTexts:=false;
  313.  
  314.   NotErrors:=false;
  315.  
  316.   Error01:=false;                                         // ошибка первой строки
  317.   Error02:=false;                                         // пропущенная реплика
  318.   Error03:=false;      // Изначально ошибок типа нет,     // бг спр или муз пустые
  319.   Error04:=false;      // потом появляется информация     // текст последней строки (должно быть "|")
  320.   Error05:=false;      // об ошибке, что включает флаг    // ссылки в последней строке (проверка, что там не "=")
  321.   Error06:=false;                                         // расширение файлов
  322.   Error07:=false;                                         // неправильное расположение амперсанта
  323.   Error08:=false;                                         // слишком много текста в одном поле
  324.  
  325.   with Form1.StringGrid1 do
  326.     begin
  327.  
  328.       // Ошибка 1
  329.  
  330.       if (CellS[3,1]='=') or (CellS[5,1]='=') or (CellS[6,1]='=') or (CellS[7,1]='=')  then
  331.         begin
  332.         Error01:=true;
  333.         Er1:= 'Ошибка #01 - ErrorBeginFile' + #13 + 'Первая строка файла не может содержать "=", заполните все необходимые данные'+#13+#13;
  334.         end;
  335.  
  336.       // Ошибка 2
  337.  
  338.       for i:=1 to RowCount-1 do
  339.         if (Cells[4,i]='') or (Cells[4,i]='=') then
  340.           SpaceText:=true;
  341.  
  342.       if SpaceText then
  343.         begin
  344.         Error02:=true;
  345.         Er2:= 'Ошибка #02 - TextError' + #13 + 'Поле текста не может быть пустым или заполненным лишь "=", заполните все текстовые поля'+#13+#13;
  346.         end;
  347.  
  348.       // Ошибка 3
  349.  
  350.       for j:=1 to RowCount-1 do
  351.         if (Cells[5,j]='') or (Cells[6,j]='') or (Cells[7,j]='') then
  352.           SpaceLink:=true;
  353.  
  354.  
  355.       if SpaceLink then
  356.         begin
  357.         Error03:=true;
  358.         Er3:= 'Ошибка #03 - LinkError' + #13 + 'Поля BG, Spr или Muz не могут быть пустыми, заполните их содержимым или символом "="'+#13+#13;
  359.         end;
  360.  
  361.       // Ошибка 4
  362.  
  363.       if (pos('|', Cells[4,RowCount-1])=0) and (Cells[4,RowCount-1]<>'end.') then
  364.         begin
  365.         Error04:=true;
  366.         Er4:= 'Ошибка #04 - ErrorEndFile-01' + #13 + 'Текстовое поле последней строки должно содержать названия кнопок выбора, разделённые символом "|" или "end.", если это конец последнего файла'+#13+#13;
  367.         end;
  368.  
  369.       // Ошибка 5
  370.  
  371.       if ((Cells[5,RowCount-1]='=') or (Cells[6,RowCount-1]='=')) and (Cells[4,RowCount-1]<>'end.') then  // если в текстовом поле стоит End., значит это можно не указывать ссылки и ошибки быть не должно
  372.         begin
  373.         Error05:=true;
  374.         Er5:= 'Ошибка #05 - ErrorEndFile-02' + #13 + 'Поля BG и Spr последней строки должны содержать ссылки на следующие сюжетные файлы, или в последней текстовой строке должно быть написано "end."' +#13+#13;
  375.         end;
  376.  
  377.       // Ошибка 6
  378.  
  379.       for k:=1 to RowCount-1 do
  380.         if (pos('.',Cells[5,k])<>0) or (pos('.',Cells[6,k])<>0) or (pos('.',Cells[7,k])<>0) then
  381.           ExtEr:=true;
  382.  
  383.       if ExtEr then
  384.         begin
  385.         Error06:=true;
  386.         Er6:= 'Ошибка #06 - ExtensionError' + #13 + 'В ссылках на сюжетные файлы, изображения или музыку не нужно указывать расширение, оно ставится автоматически каждому элементу'+#13+#13;
  387.         end;
  388.  
  389.       // Ошибка 7
  390.  
  391.       for p:=1 to RowCount-2 do
  392.         if ((pos('&',Cells[4,p])>2) and (pos('&',Cells[4,p+1])<>1)) or      // если на первой строке он в конце, а в начале следующей нет
  393.            ((pos('&',Cells[4,p])<2) and (pos('&',Cells[4,p+1])=1)) then     // если его нет к конце первой, хотя есть в начале следующей
  394.           SumOfTexts:=true;
  395.  
  396.         if (pos('&',Cells[4,1])=1) or  (pos('&',Cells[4,RowCount-2])>2) then   // если он в начале первой строки или в конце последней
  397.           SumOfTexts:=true;
  398.  
  399.       if SumOfTexts then
  400.         begin
  401.         Error07:=true;
  402.         Er7:= 'Ошибка #07 - SumError' + #13 + 'Ошибка в использовании амперсанта "&". Он должен стоять в конце первой строки И начале второй. Также он не может стоять в начале или конце файла'+#13+#13;
  403.         end;
  404.  
  405.       // Ошибка 8
  406.      
  407.       for q:=1 to RowCount-1 do
  408.         if length(Cells[4,q])>252 then
  409.           TooMuchText:=true;
  410.  
  411.       if TooMuchText then
  412.         begin
  413.         Error08:=true;
  414.         Er8:= 'Ошибка #08 - LengthError' + #13 + 'Слишком много текста в текстовом поле. Уменьшите его размер до ~120 символов (видимая область) или перенесите с помощью амперсанта "&"'+#13+#13;
  415.         end;
  416.  
  417.       //    ____________
  418.  
  419.       if Error01 or Error02 or Error03 or Error04 or Error05 or Error06 or Error07 or Error08 then  // Если какая-то ошибка есть
  420.       case MessageDlg(Er1+Er2+Er3+Er4+Er5+Er6+Er7+Er8,          //Складываем и выводим присутствующие сообщения об ошибках
  421.                         mtConfirmation,[mbYes],0) of
  422.             mrYes: ;
  423.         end
  424.       else   // Ошибок нет
  425.         begin
  426.           case MessageDlg('Ошибок не обнаружено' + #13 + 'Теперь файл можно сохранить',
  427.                          mtConfirmation,[mbYes],0) of
  428.               mrYes: ;
  429.             end;
  430.           NotErrors:=true;
  431.         end;
  432.  
  433.   ErrorTest:=true;
  434.  
  435.   //      ОБРАБОТКА ИНФОРМАЦИИ О ФАЙЛЕ
  436.  
  437.   Inf2:=0;   // Количество событий, а значит строк без символа "&"
  438.   Inf3:=0;   // Сумма всех символов текста
  439.   InfB:=0; InfS:=0; InfM:=0;   // Как много не пустых ячеек BG, Spr, Muz
  440.  
  441.   for o:=1 to RowCount-2 do
  442.     begin
  443.       if (pos('&',Cells[4,o])=0) or (pos('&',Cells[4,o])=1) then
  444.         Inf2+=1;
  445.       Inf3+=length(Cells[4,o]);
  446.       if Cells[5,o]<>'=' then
  447.         InfB+=1;
  448.       if Cells[6,o]<>'=' then
  449.         InfS+=1;
  450.       if Cells[7,o]<>'=' then
  451.         InfM+=1;
  452.     end;
  453.  
  454.   if ErrorTest then
  455.     Inform1:=IntToStr(RowCount-1)
  456.     else
  457.       Inform1:='Error';
  458.   if not Error02 then
  459.     Inform2:=IntToStr(Inf2+1)
  460.     else
  461.       Inform2:='Error';
  462.   if not Error02 then
  463.     Inform3:=IntToStr(Inf3)
  464.     else
  465.       Inform3:='Error';
  466.   if (not Error03) and (not Error01) then
  467.     Inform4:=IntToStr(InfB-1)+' BG, '+IntToStr(InfS-1)+' Spr, '+IntToStr(InfM-1)+' Muz'
  468.     else
  469.       Inform4:='Error';
  470.  
  471.   Label1.Caption:='Строк файла: '+Inform1+#13+'Событий в файле: '+Inform2+#13+#13+
  472.                 'Длина всего текста: '+Inform3+#13+'Частота смены окружения: '+Inform4;
  473.  
  474.  
  475.   //                  Заполнение таблицы ошибок
  476.  
  477.   if not ErrorTest then
  478.     Label2.Caption:=#13+'Тест ошибок не проводился'
  479.   else
  480.     if NotErrors then
  481.     Label2.Caption:=#13+'Ошибок нет'
  482.     else
  483.       begin
  484.         if Error01 then
  485.           E1:='ЕСТЬ      '
  486.         else
  487.           E1:='              ';
  488.  
  489.         if Error02 then
  490.           E2:='ЕСТЬ      '
  491.         else
  492.           E2:='              ';
  493.  
  494.         if Error03 then
  495.           E3:='ЕСТЬ      '
  496.         else
  497.           E3:='              ';
  498.  
  499.         if Error04 then
  500.           E4:='ЕСТЬ      '
  501.         else
  502.           E4:='              ';
  503.  
  504.         if Error05 then
  505.           E5:='ЕСТЬ      '
  506.         else
  507.           E5:='              ';
  508.  
  509.         if Error06 then
  510.           E6:='ЕСТЬ      '
  511.         else
  512.           E6:='              ';
  513.  
  514.         if Error07 then
  515.           E7:='ЕСТЬ      '
  516.         else
  517.           E7:='              ';
  518.  
  519.         if Error08 then
  520.           E8:='ЕСТЬ      '
  521.         else
  522.           E8:='              ';
  523.  
  524.         Label2.Caption:='Ошибка #1: '+E1+'Ошибка #5: '+E5+#13+
  525.                         'Ошибка #2: '+E2+'Ошибка #6: '+E6+#13+
  526.                         'Ошибка #3: '+E3+'Ошибка #7: '+E7+#13+
  527.                         'Ошибка #4: '+E4+'Ошибка #8: '+E8+#13;
  528.     end;
  529.   end;
  530. end;
  531.  
  532. procedure TForm1.miCloseClick(Sender: TObject);
  533. begin
  534.   // Стандартных диалог сохранения файла
  535.   // Если таблица была изменена
  536.   if StringGrid1.Modified then
  537.     // Стандартное окно Сообщения
  538.     case MessageDlg('Данные были изменены' + #13 + 'Сохранить их?',
  539.                     mtConfirmation,[mbYes, mbNo, mbCancel],0) of
  540.       mrYes: miSaveClick(self); // Сохраняем файл
  541.       mrNo:;                    // Ничего не делаем
  542.       mrCancel: Exit; // Выходим из окна сообщения, и возвращаемся к редактированию текста(действия ниже выполняться не будут)
  543.     end;
  544.  
  545.   // Если мы не вишли через 'Cancel', то совершаем стандартные действия
  546.   ClearTab;  // Очищаем таблицу процедурой собственного производства  и тд
  547.   StringGrid1.Modified:= False;
  548.   sf:='';
  549.   Form1.Caption:= 'Form1';
  550. end;
  551.  
  552. procedure TForm1.miCreateClick(Sender: TObject);
  553. begin
  554.   if StringGrid1.Modified then
  555.     // Стандартное окно Сообщения
  556.     case MessageDlg('Данные были изменены' + #13 + 'Сохранить их?',
  557.                     mtConfirmation,[mbYes, mbNo, mbCancel],0) of
  558.       mrYes: miSaveClick(self); // Сохраняем файл
  559.       mrNo:;                    // Ничего не делаем
  560.       mrCancel: Exit; // Выходим из окна сообщения, и возвращаемся к редактированию текста(действия ниже выполняться не будут)
  561.     end;
  562.  
  563.     Form1.StringGrid1.RowCount:=11;
  564.     ClearTab;  // Очищаем таблицу своей процедурой, что равносильно изменению Таблицы
  565.     StringGrid1.Modified:= False; // Таблица не была изменена
  566.     sf:='';     // А у файла нет ещё имени
  567. end;
  568.  
  569. procedure TForm1.miExitClick(Sender: TObject);
  570. begin
  571.   // Сообщение: Сохранить ли именённый файл
  572.   If StringGrid1.Modified then
  573.     case MessageDlg('Таблица была изменена' + #13 + 'Сохранить её?',
  574.                     mtConfirmation,[mbYes, mbNo, mbCancel],0) of
  575.       mrYes   : miSaveClick(self);
  576.       mrNo    : ;
  577.       mrCancel: Exit;
  578.     end;
  579.   // Закрываем приложение
  580.   Close;
  581. end;
  582.  
  583. procedure TForm1.miMinusClick(Sender: TObject);
  584. begin
  585.   with Form1.StringGrid1 do
  586.     begin
  587.       if (CellS[1,RowCount-1] ='0') and (CellS[2,RowCount-1] ='0') and (CellS[3,RowCount-1] ='') and (CellS[4,RowCount-1] ='') and (CellS[5,RowCount-1] ='') and (CellS[6,RowCount-1] ='') and (CellS[7,RowCount-1] ='') and (CellS[8,RowCount-1] ='')  then
  588.         RowCount := RowCount -1
  589.       else
  590.     case MessageDlg('Удаляемая строка чем-то заполнена или'+#13+'код (Spc) события отличен от нуля'+#13+'Для удаления строки её коды Spc должны быть равны 0, а остальные поля пустыми',
  591.                     mtConfirmation,[mbYes, mbCancel],0) of
  592.       mrYes   : ;
  593.       mrCancel: Exit;
  594.     end;
  595.   end;
  596. end;
  597.  
  598. procedure TForm1.miOpenClick(Sender: TObject);
  599. begin
  600.   // Тот же саый диалог сохранинея файла
  601.   If StringGrid1.Modified then
  602.     case MessageDlg('Текст был изменён' + #13 + 'Сохранить его?',
  603.                     mtConfirmation,[mbYes, mbNo, mbCancel],0) of
  604.       mrYes   : miSaveClick(self);
  605.       mrNo    : ;
  606.       mrCancel: Exit;
  607.     end;
  608.  
  609.   // Если дилог открытия файла завершился нормально,
  610.   // То есть его не закрыли и не нажали cancel
  611.   // То есть юзер выбрал нужный ему файл и нажал ОК
  612.   If openDialog1.Execute then
  613.     begin
  614.       sf:=OpenDialog1.FileName;     // Извлекаем имя файла из этого диалога
  615.       ClearTab;  // Очищаем таблицу процедурой собственного производства  и тд
  616.       LoadFromFileOfData;          // Выводим его в StringGrid1
  617.       StringGrid1.Modified:=False;        // Что равносильно его изменению, но мы же не изменяли файл
  618.       Form1.Caption:='Редактор сюжета ' + sf; // В заголовок окна выводим имя файла
  619.     end;
  620. end;
  621.  
  622. procedure TForm1.miPlusClick(Sender: TObject);
  623. var i:integer;
  624. begin
  625.   with Form1.StringGrid1 do
  626.     begin
  627.       RowCount := RowCount+10;
  628.         for i:=RowCount-10 to RowCount-1 do
  629.           begin
  630.             Cells[0,i] := IntToStr(i);
  631.             Cells[1,i] := '0';
  632.             Cells[2,i] := '0';
  633.           end;
  634.     end;
  635. end;
  636.  
  637. procedure TForm1.miRedClick(Sender: TObject);
  638. begin
  639.  
  640. end;
  641.  
  642. procedure TForm1.miSaveAsClick(Sender: TObject);
  643. begin
  644.   // Если диалог сохранения прошёл хорошо
  645.   if SaveDialog1.Execute then
  646.     begin
  647.       sf:= SaveDialog1.FileName; // Извлекаем имя файла
  648.       SaveToFileOfData;          // Используя нашу процеду, сохраняем содержиме таблицы в файл
  649.  
  650.       StringGrid1.Modified := False; // Содержимое в таблице соответсвует файлу на диске
  651.       Form1.Caption:= 'Редактор сюжета ' + sf; // Устанавливаем заголовок приложения с именем файла
  652.     end;
  653.  
  654. end;
  655.  
  656. procedure TForm1.miSaveClick(Sender: TObject);
  657. begin
  658.   // Исли имя файла не задано то вызываем Окно сохранить как
  659.   if sf = '' then miSaveAsClick(self)
  660.   else  // Иначе, то есть имя файла уже установлено
  661.     begin
  662.       SaveToFileOfData; // Сразу сохраняем его на диск
  663.       StringGrid1.Modified:= False;  // Содерхание устанавливаем не изменённым, тк сохранили всё на диск
  664.     end;
  665. end;
  666.  
  667. procedure TForm1.miZapBGClick(Sender: TObject);
  668. var i:integer;
  669. begin
  670.   with Form1.StringGrid1 do
  671.     begin
  672.       for i:=1 to RowCount-1 do
  673.         begin
  674.           if Cells[5,i]='' then
  675.             Cells[5,i] := '=';
  676.         end;
  677.     end;
  678. end;
  679.  
  680. procedure TForm1.miZapMuzClick(Sender: TObject);
  681. var i:integer;
  682. begin
  683.   with Form1.StringGrid1 do
  684.     begin
  685.       for i:=1 to RowCount-1 do
  686.         begin
  687.           if Cells[7,i]='' then
  688.             Cells[7,i] := '=';
  689.         end;
  690.     end;
  691. end;
  692.  
  693. procedure TForm1.miZapSprClick(Sender: TObject);
  694. var i:integer;
  695. begin
  696.   with Form1.StringGrid1 do
  697.     begin
  698.       for i:=1 to RowCount-1 do
  699.         begin
  700.           if Cells[6,i]='' then
  701.             Cells[6,i] := '=';
  702.         end;
  703.     end;
  704. end;
  705.  
  706. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement