Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit Unit1;
- {$mode objfpc}{$H+}
- interface
- uses
- Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, Grids,
- StdCtrls, Menus;
- type
- { TForm1 }
- TForm1 = class(TForm)
- Label1: TLabel;
- Label2: TLabel;
- MainMenu1: TMainMenu;
- miDelAll: TMenuItem;
- miProv: TMenuItem;
- miZapoln: TMenuItem;
- miZapBG: TMenuItem;
- miZapSpr: TMenuItem;
- miZapMuz: TMenuItem;
- miRed: TMenuItem;
- miPlus: TMenuItem;
- miMinus: TMenuItem;
- miCreate: TMenuItem;
- miOpen: TMenuItem;
- miClose: TMenuItem;
- miSave: TMenuItem;
- miSaveAs: TMenuItem;
- miExit: TMenuItem;
- miFile: TMenuItem;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- StringGrid1: TStringGrid;
- procedure FormCreate(Sender: TObject);
- procedure miDelAllClick(Sender: TObject);
- procedure miProvClick(Sender: TObject);
- procedure miCloseClick(Sender: TObject);
- procedure miCreateClick(Sender: TObject);
- procedure miExitClick(Sender: TObject);
- procedure miMinusClick(Sender: TObject);
- procedure miOpenClick(Sender: TObject);
- procedure miPlusClick(Sender: TObject);
- procedure miRedClick(Sender: TObject);
- procedure miSaveAsClick(Sender: TObject);
- procedure miSaveClick(Sender: TObject);
- procedure miZapBGClick(Sender: TObject);
- procedure miZapMuzClick(Sender: TObject);
- procedure miZapSprClick(Sender: TObject);
- private
- public
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.lfm}
- Type
- Data=Record
- SpcT:integer;
- SpcP:integer;
- Name:string[30];
- Text:string[255];
- BG:string[20];
- Spr:string[20];
- Muz:string[30];
- Ext:string[30];
- end;
- // Глобальные переменные
- var sf: string; // Спецификация файла - его полное имя
- Error01,Error02,Error03,Error04,Error05,Error06,Error07,Error08:boolean; // флаги ошибок
- ErrorTest,NotErrors:boolean; // проводилась проверка или нет/есть ошибки или нет
- { TForm1 }
- procedure TabForFile;
- var i,j: integer;
- begin
- // Используем менеджер контекста для сокращения,
- // чтобы слишком часто не писать длинную строчку для доступа к атрибуту
- // По типу Form1.Stringgrid1.attr, как бы считаем что мы внутри StringGrid1
- // И Можем не указывать полное имя, чтобы поменять что-то внутри
- with Form1.StringGrid1 do
- begin
- ColCount := 9; // Число столбцов
- RowCount := 11; // Количество строк
- // Устанавливаем ширину отдельных ячеек
- // Столбцы (как почти и всё) нумеруются с нуля!!!
- ColWidths[0] := 30; // Номер
- ColWidths[1] := 40; // SpcT - ОСОБЫЙ КОД текста
- ColWidths[2] := 40; // SpcP - ОСОБЫЙ КОД картинки
- ColWidths[3] := 120; // Name - Имя
- ColWidths[4] := 840; // Text - Текст
- ColWidths[5] := 100; // BG - Ссылка BG
- ColWidths[6] := 100; // Spr - Ссылка Spr
- ColWidths[7] := 100; // Muz - Ссылка Muz
- ColWidths[8] := 100; // Запасной столбец, чтобы если понадобится не изменять кодировку файлов
- // Заполняем заголовок нашей таблицы
- Cells[0,0] := '№';
- Cells[1,0] := 'SpcT';
- Cells[2,0] := 'SpcP';
- Cells[3,0] := 'Name';
- Cells[4,0] := 'Text';
- Cells[5,0] := 'BG';
- Cells[6,0] := 'Spr';
- Cells[7,0] := 'Muz';
- Cells[8,0] := 'Extra';
- for j:=1 to RowCount-1 do
- begin
- Cells[0,j] := IntToStr(j);
- Cells[1,j] := '0';
- Cells[2,j] := '0';
- end;
- // Теперь устанавливаем ширину всей таблицы
- width := 25; // дополнительные 25 пикселей на полосу прокрути и прочее
- for i:=0 to ColCount-1 do
- width:= width + ColWidths[i]; // Прибавляем ширину i-го столбца к общей ширине таблицы
- Height:=600;
- end;
- end;
- // Процедура очищения таблицы (без заголовка)
- // StringGrid1.Clean - очищает всю таблицу
- Procedure ClearTab;
- var i, j,k: integer;
- begin
- with Form1.StringGrid1 do
- // Перебираем все строки кроме заголока
- for i:= 1 to RowCount -1 do
- // Не имеет смысла очищать строку если она пустая
- // Здесь проблема в том, что ячейка 'Номер' может быть пуста и в то же время
- // в ячейке 'Фамилия' Может быть заполнена
- // Но это НЕ ЗНАЧИТ, что всегда будут проверятся ВСЕ ячейки
- // Данное выражение вернёт сразу True, когда хотябы одно утвердение вернёт True(в первый раз)
- 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
- // Перебираем все столбцы
- for j:=0 to ColCount-1 do
- begin
- Cells[j,i] :=''; // 'обнуляем'нужные ячейки
- end;
- with Form1.StringGrid1 do
- for k:=1 to RowCount-1 do
- begin
- Cells[0,k] := IntToStr(k);
- Cells[1,k] := '0';
- Cells[2,k] := '0';
- end;
- ErrorTest:=false;
- Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
- 'Длина всего текста: '+#13+'Частота смены окружения: ';
- end;
- procedure SaveToFileOfData;
- var f: file of Data;
- s: Data;
- i: integer;
- begin
- // Стандартные действия по подготовке к записи в файл
- AssignFile(f, sf);
- Rewrite(f);
- with Form1.StringGrid1 do
- // Перебираем строки
- // Причём начинаем с 1, тк на 0 месте строка ЗАГОЛОВКА
- for i:=1 to RowCount -1 do
- // Перебираем НЕ ПУСТЫЕ строки
- if CellS[0,i] <>'' then
- begin
- // Записываем в s нужные поля, кто он, где учится, как учится и тп
- s.SpcT := StrToInt(Cells[1,i]);
- s.SpcP := StrToInt(Cells[2,i]);
- s.Name := Cells[3,i];
- s.Text := Cells[4,i];
- s.BG := Cells[5,i];
- s.Spr := Cells[6,i];
- s.Muz := Cells[7,i];
- s.Ext := Cells[8,i];
- // Полученного студента записываем в файл
- write(f,s);
- end;
- // в самом конце закрываем файл
- closefile(f);
- end;
- // Загрузить данные в таблицу из файла
- procedure LoadFromFileOfData;
- var f: file of Data;
- s: Data; // Переменная для ЗАПИСИ В StringGrid1 одного студента и считывание его из файла
- i: integer;
- begin
- // Подготавливаем файл к чтению
- AssignFile(f, sf);
- Reset(f);
- with Form1.StringGrid1 do
- begin
- RowCount:=filesize(f)+1;
- for i:=1 to filesize(f) do
- begin
- // Считываем одного студента
- read(f,s);
- // И записываем данные о нём в таблицу
- Cells[0,i]:= IntToStr(i);
- Cells[1,i]:= IntToStr(s.SpcT);
- Cells[2,i]:= IntToStr(s.SpcP);
- Cells[3,i]:= s.Name;
- Cells[4,i]:= s.Text;
- Cells[5,i]:= s.BG;
- Cells[6,i]:= s.Spr;
- Cells[7,i]:= s.Muz;
- Cells[8,i]:= s.Ext;
- end;
- end;
- // и в самом конце закрываем файл
- closefile(f);
- ErrorTest:=false;
- Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
- 'Длина всего текста: '+#13+'Частота смены окружения: ';
- Form1.Label2.Caption:=#13+'Тест ошибок не проводился';
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- TabForFile; // Устанавливаем параметры таблицы по умолчанию
- // Добавляем оциию редактирования содержимого таблицы
- StringGrid1.Options:=StringGrid1.Options + [goEditing];
- StringGrid1.FixedCols:=0; //Чтобы можно было редактировать номера
- StringGrid1.Modified := False;
- sf := ''; // Никакого файла мы ещё не открывали
- //Form1.Width:=Form1.StringGrid1.Width;
- Form1.Width:=1485;
- //Form1.Height:=Form1.StringGrid1.Height+120;
- Form1.Height:=720;
- // Каталоги для сохраненияи открытия по умочанию (Папка проекта)
- OpenDialog1.InitialDir:='';
- SaveDialog1.InitialDir:='';
- NotErrors:=false;
- ErrorTest:=false;
- Form1.Label1.Caption:='Строк файла: '+#13+'Событий в файле: '+#13+#13+
- 'Длина всего текста: '+#13+'Частота смены окружения: ';
- Form1.Label2.Caption:=#13+'Тест ошибок не проводился';
- end;
- procedure TForm1.miDelAllClick(Sender: TObject);
- var n:integer;
- begin
- with Form1.StringGrid1 do
- begin
- n:=0;
- while (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] ='') do
- begin
- RowCount := RowCount -1;
- n+=1;
- end;
- if n=0 then
- case MessageDlg('Пустых строк не обнаружено', mtConfirmation,[mbYes],0) of
- mrYes:;
- end
- else
- case MessageDlg('Удалено '+IntToStr(n)+' пустых строк', mtConfirmation,[mbYes],0) of
- mrYes:;
- end;
- end;
- end;
- procedure TForm1.miProvClick(Sender: TObject);
- var i,j,k,o,p,q:integer;
- Er1, Er2, Er3, Er4, Er5, Er6, Er7,Er8:string;
- E1,E2,E3,E4,E5,E6,E7,E8:string;
- SpaceText,SpaceLink,ExtEr,TooMuchText,SumOfTexts:boolean;
- Inf2, Inf3, InfB, InfS, InfM:integer;
- Inform1,Inform2,Inform3,Inform4:string;
- begin
- SpaceText:=false;
- SpaceLink:=false;
- ExtEr:=false;
- TooMuchText:=false;
- SumOfTexts:=false;
- NotErrors:=false;
- Error01:=false; // ошибка первой строки
- Error02:=false; // пропущенная реплика
- Error03:=false; // Изначально ошибок типа нет, // бг спр или муз пустые
- Error04:=false; // потом появляется информация // текст последней строки (должно быть "|")
- Error05:=false; // об ошибке, что включает флаг // ссылки в последней строке (проверка, что там не "=")
- Error06:=false; // расширение файлов
- Error07:=false; // неправильное расположение амперсанта
- Error08:=false; // слишком много текста в одном поле
- with Form1.StringGrid1 do
- begin
- // Ошибка 1
- if (CellS[3,1]='=') or (CellS[5,1]='=') or (CellS[6,1]='=') or (CellS[7,1]='=') then
- begin
- Error01:=true;
- Er1:= 'Ошибка #01 - ErrorBeginFile' + #13 + 'Первая строка файла не может содержать "=", заполните все необходимые данные'+#13+#13;
- end;
- // Ошибка 2
- for i:=1 to RowCount-1 do
- if (Cells[4,i]='') or (Cells[4,i]='=') then
- SpaceText:=true;
- if SpaceText then
- begin
- Error02:=true;
- Er2:= 'Ошибка #02 - TextError' + #13 + 'Поле текста не может быть пустым или заполненным лишь "=", заполните все текстовые поля'+#13+#13;
- end;
- // Ошибка 3
- for j:=1 to RowCount-1 do
- if (Cells[5,j]='') or (Cells[6,j]='') or (Cells[7,j]='') then
- SpaceLink:=true;
- if SpaceLink then
- begin
- Error03:=true;
- Er3:= 'Ошибка #03 - LinkError' + #13 + 'Поля BG, Spr или Muz не могут быть пустыми, заполните их содержимым или символом "="'+#13+#13;
- end;
- // Ошибка 4
- if (pos('|', Cells[4,RowCount-1])=0) and (Cells[4,RowCount-1]<>'end.') then
- begin
- Error04:=true;
- Er4:= 'Ошибка #04 - ErrorEndFile-01' + #13 + 'Текстовое поле последней строки должно содержать названия кнопок выбора, разделённые символом "|" или "end.", если это конец последнего файла'+#13+#13;
- end;
- // Ошибка 5
- if ((Cells[5,RowCount-1]='=') or (Cells[6,RowCount-1]='=')) and (Cells[4,RowCount-1]<>'end.') then // если в текстовом поле стоит End., значит это можно не указывать ссылки и ошибки быть не должно
- begin
- Error05:=true;
- Er5:= 'Ошибка #05 - ErrorEndFile-02' + #13 + 'Поля BG и Spr последней строки должны содержать ссылки на следующие сюжетные файлы, или в последней текстовой строке должно быть написано "end."' +#13+#13;
- end;
- // Ошибка 6
- for k:=1 to RowCount-1 do
- if (pos('.',Cells[5,k])<>0) or (pos('.',Cells[6,k])<>0) or (pos('.',Cells[7,k])<>0) then
- ExtEr:=true;
- if ExtEr then
- begin
- Error06:=true;
- Er6:= 'Ошибка #06 - ExtensionError' + #13 + 'В ссылках на сюжетные файлы, изображения или музыку не нужно указывать расширение, оно ставится автоматически каждому элементу'+#13+#13;
- end;
- // Ошибка 7
- for p:=1 to RowCount-2 do
- if ((pos('&',Cells[4,p])>2) and (pos('&',Cells[4,p+1])<>1)) or // если на первой строке он в конце, а в начале следующей нет
- ((pos('&',Cells[4,p])<2) and (pos('&',Cells[4,p+1])=1)) then // если его нет к конце первой, хотя есть в начале следующей
- SumOfTexts:=true;
- if (pos('&',Cells[4,1])=1) or (pos('&',Cells[4,RowCount-2])>2) then // если он в начале первой строки или в конце последней
- SumOfTexts:=true;
- if SumOfTexts then
- begin
- Error07:=true;
- Er7:= 'Ошибка #07 - SumError' + #13 + 'Ошибка в использовании амперсанта "&". Он должен стоять в конце первой строки И начале второй. Также он не может стоять в начале или конце файла'+#13+#13;
- end;
- // Ошибка 8
- for q:=1 to RowCount-1 do
- if length(Cells[4,q])>252 then
- TooMuchText:=true;
- if TooMuchText then
- begin
- Error08:=true;
- Er8:= 'Ошибка #08 - LengthError' + #13 + 'Слишком много текста в текстовом поле. Уменьшите его размер до ~120 символов (видимая область) или перенесите с помощью амперсанта "&"'+#13+#13;
- end;
- // ____________
- if Error01 or Error02 or Error03 or Error04 or Error05 or Error06 or Error07 or Error08 then // Если какая-то ошибка есть
- case MessageDlg(Er1+Er2+Er3+Er4+Er5+Er6+Er7+Er8, //Складываем и выводим присутствующие сообщения об ошибках
- mtConfirmation,[mbYes],0) of
- mrYes: ;
- end
- else // Ошибок нет
- begin
- case MessageDlg('Ошибок не обнаружено' + #13 + 'Теперь файл можно сохранить',
- mtConfirmation,[mbYes],0) of
- mrYes: ;
- end;
- NotErrors:=true;
- end;
- ErrorTest:=true;
- // ОБРАБОТКА ИНФОРМАЦИИ О ФАЙЛЕ
- Inf2:=0; // Количество событий, а значит строк без символа "&"
- Inf3:=0; // Сумма всех символов текста
- InfB:=0; InfS:=0; InfM:=0; // Как много не пустых ячеек BG, Spr, Muz
- for o:=1 to RowCount-2 do
- begin
- if (pos('&',Cells[4,o])=0) or (pos('&',Cells[4,o])=1) then
- Inf2+=1;
- Inf3+=length(Cells[4,o]);
- if Cells[5,o]<>'=' then
- InfB+=1;
- if Cells[6,o]<>'=' then
- InfS+=1;
- if Cells[7,o]<>'=' then
- InfM+=1;
- end;
- if ErrorTest then
- Inform1:=IntToStr(RowCount-1)
- else
- Inform1:='Error';
- if not Error02 then
- Inform2:=IntToStr(Inf2+1)
- else
- Inform2:='Error';
- if not Error02 then
- Inform3:=IntToStr(Inf3)
- else
- Inform3:='Error';
- if (not Error03) and (not Error01) then
- Inform4:=IntToStr(InfB-1)+' BG, '+IntToStr(InfS-1)+' Spr, '+IntToStr(InfM-1)+' Muz'
- else
- Inform4:='Error';
- Label1.Caption:='Строк файла: '+Inform1+#13+'Событий в файле: '+Inform2+#13+#13+
- 'Длина всего текста: '+Inform3+#13+'Частота смены окружения: '+Inform4;
- // Заполнение таблицы ошибок
- if not ErrorTest then
- Label2.Caption:=#13+'Тест ошибок не проводился'
- else
- if NotErrors then
- Label2.Caption:=#13+'Ошибок нет'
- else
- begin
- if Error01 then
- E1:='ЕСТЬ '
- else
- E1:=' ';
- if Error02 then
- E2:='ЕСТЬ '
- else
- E2:=' ';
- if Error03 then
- E3:='ЕСТЬ '
- else
- E3:=' ';
- if Error04 then
- E4:='ЕСТЬ '
- else
- E4:=' ';
- if Error05 then
- E5:='ЕСТЬ '
- else
- E5:=' ';
- if Error06 then
- E6:='ЕСТЬ '
- else
- E6:=' ';
- if Error07 then
- E7:='ЕСТЬ '
- else
- E7:=' ';
- if Error08 then
- E8:='ЕСТЬ '
- else
- E8:=' ';
- Label2.Caption:='Ошибка #1: '+E1+'Ошибка #5: '+E5+#13+
- 'Ошибка #2: '+E2+'Ошибка #6: '+E6+#13+
- 'Ошибка #3: '+E3+'Ошибка #7: '+E7+#13+
- 'Ошибка #4: '+E4+'Ошибка #8: '+E8+#13;
- end;
- end;
- end;
- procedure TForm1.miCloseClick(Sender: TObject);
- begin
- // Стандартных диалог сохранения файла
- // Если таблица была изменена
- if StringGrid1.Modified then
- // Стандартное окно Сообщения
- case MessageDlg('Данные были изменены' + #13 + 'Сохранить их?',
- mtConfirmation,[mbYes, mbNo, mbCancel],0) of
- mrYes: miSaveClick(self); // Сохраняем файл
- mrNo:; // Ничего не делаем
- mrCancel: Exit; // Выходим из окна сообщения, и возвращаемся к редактированию текста(действия ниже выполняться не будут)
- end;
- // Если мы не вишли через 'Cancel', то совершаем стандартные действия
- ClearTab; // Очищаем таблицу процедурой собственного производства и тд
- StringGrid1.Modified:= False;
- sf:='';
- Form1.Caption:= 'Form1';
- end;
- procedure TForm1.miCreateClick(Sender: TObject);
- begin
- if StringGrid1.Modified then
- // Стандартное окно Сообщения
- case MessageDlg('Данные были изменены' + #13 + 'Сохранить их?',
- mtConfirmation,[mbYes, mbNo, mbCancel],0) of
- mrYes: miSaveClick(self); // Сохраняем файл
- mrNo:; // Ничего не делаем
- mrCancel: Exit; // Выходим из окна сообщения, и возвращаемся к редактированию текста(действия ниже выполняться не будут)
- end;
- Form1.StringGrid1.RowCount:=11;
- ClearTab; // Очищаем таблицу своей процедурой, что равносильно изменению Таблицы
- StringGrid1.Modified:= False; // Таблица не была изменена
- sf:=''; // А у файла нет ещё имени
- end;
- procedure TForm1.miExitClick(Sender: TObject);
- begin
- // Сообщение: Сохранить ли именённый файл
- If StringGrid1.Modified then
- case MessageDlg('Таблица была изменена' + #13 + 'Сохранить её?',
- mtConfirmation,[mbYes, mbNo, mbCancel],0) of
- mrYes : miSaveClick(self);
- mrNo : ;
- mrCancel: Exit;
- end;
- // Закрываем приложение
- Close;
- end;
- procedure TForm1.miMinusClick(Sender: TObject);
- begin
- with Form1.StringGrid1 do
- begin
- 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
- RowCount := RowCount -1
- else
- case MessageDlg('Удаляемая строка чем-то заполнена или'+#13+'код (Spc) события отличен от нуля'+#13+'Для удаления строки её коды Spc должны быть равны 0, а остальные поля пустыми',
- mtConfirmation,[mbYes, mbCancel],0) of
- mrYes : ;
- mrCancel: Exit;
- end;
- end;
- end;
- procedure TForm1.miOpenClick(Sender: TObject);
- begin
- // Тот же саый диалог сохранинея файла
- If StringGrid1.Modified then
- case MessageDlg('Текст был изменён' + #13 + 'Сохранить его?',
- mtConfirmation,[mbYes, mbNo, mbCancel],0) of
- mrYes : miSaveClick(self);
- mrNo : ;
- mrCancel: Exit;
- end;
- // Если дилог открытия файла завершился нормально,
- // То есть его не закрыли и не нажали cancel
- // То есть юзер выбрал нужный ему файл и нажал ОК
- If openDialog1.Execute then
- begin
- sf:=OpenDialog1.FileName; // Извлекаем имя файла из этого диалога
- ClearTab; // Очищаем таблицу процедурой собственного производства и тд
- LoadFromFileOfData; // Выводим его в StringGrid1
- StringGrid1.Modified:=False; // Что равносильно его изменению, но мы же не изменяли файл
- Form1.Caption:='Редактор сюжета ' + sf; // В заголовок окна выводим имя файла
- end;
- end;
- procedure TForm1.miPlusClick(Sender: TObject);
- var i:integer;
- begin
- with Form1.StringGrid1 do
- begin
- RowCount := RowCount+10;
- for i:=RowCount-10 to RowCount-1 do
- begin
- Cells[0,i] := IntToStr(i);
- Cells[1,i] := '0';
- Cells[2,i] := '0';
- end;
- end;
- end;
- procedure TForm1.miRedClick(Sender: TObject);
- begin
- end;
- procedure TForm1.miSaveAsClick(Sender: TObject);
- begin
- // Если диалог сохранения прошёл хорошо
- if SaveDialog1.Execute then
- begin
- sf:= SaveDialog1.FileName; // Извлекаем имя файла
- SaveToFileOfData; // Используя нашу процеду, сохраняем содержиме таблицы в файл
- StringGrid1.Modified := False; // Содержимое в таблице соответсвует файлу на диске
- Form1.Caption:= 'Редактор сюжета ' + sf; // Устанавливаем заголовок приложения с именем файла
- end;
- end;
- procedure TForm1.miSaveClick(Sender: TObject);
- begin
- // Исли имя файла не задано то вызываем Окно сохранить как
- if sf = '' then miSaveAsClick(self)
- else // Иначе, то есть имя файла уже установлено
- begin
- SaveToFileOfData; // Сразу сохраняем его на диск
- StringGrid1.Modified:= False; // Содерхание устанавливаем не изменённым, тк сохранили всё на диск
- end;
- end;
- procedure TForm1.miZapBGClick(Sender: TObject);
- var i:integer;
- begin
- with Form1.StringGrid1 do
- begin
- for i:=1 to RowCount-1 do
- begin
- if Cells[5,i]='' then
- Cells[5,i] := '=';
- end;
- end;
- end;
- procedure TForm1.miZapMuzClick(Sender: TObject);
- var i:integer;
- begin
- with Form1.StringGrid1 do
- begin
- for i:=1 to RowCount-1 do
- begin
- if Cells[7,i]='' then
- Cells[7,i] := '=';
- end;
- end;
- end;
- procedure TForm1.miZapSprClick(Sender: TObject);
- var i:integer;
- begin
- with Form1.StringGrid1 do
- begin
- for i:=1 to RowCount-1 do
- begin
- if Cells[6,i]='' then
- Cells[6,i] := '=';
- end;
- end;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement