|
|
Мини-проекты в Delphi
Проект "Расписание уроков"
Класс TStringGrid . Таблица строк — компонент StringGrid.
Он представляет собой таблицу, содержащую строки. Данные таблицы могут быть только для чтения или редактируемыми. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента.
Основные свойства компонента, определяющие отображаемый текст:
Cells[ACol, ARow: Integer]: string |
Строка, содержащаяся в ячейке с индексами столбца и строки ACol и ARow. |
Cols[Index: Integer]: TStrings |
Список строк, содержащихся в столбце с индексом Index. |
Rows[Index: Integer]: TStrings |
Список строк, содержащихся в строке с индексом Index. |
Свойство Options является множеством, определяющим многие свойства таблицы.
Создадим проект, использующий основные свойства таблицы. Разместим на форме StringGrid. Зададим свойство Align – alClient. Раскроем Options и установим goEditing – true, т. е. возможность редактирования ячеек. Установим размер таблицы: ColCount – 7, RowCount-8, ширину ячеек DefaultRowWidth-100. Заменим FixedCols на 0 и с помощью мыши уменьшим ширину первого столбца так, чтобы она была примерно равна высоте ячеек. Восстановим FixedCol=1. Осталось подогнать размер формы. Для нее установим BorderIcons.biMaximize в false.
В разделе implementation объявим переменные:
var
GridEdit:boolean;
const day:array[1..6] of string= ('Понедельник','Вторник','Среда','Четверг,'Пятница','Суббота');
Первая служит для определения было ли редактирование расписания, Вторая массив дней недели.
Создаем процедуру для загрузки формы. В не добавляем описание переменных f- текстовый файл, st-текстовая строка, служит для хранения строки, прочитанной из файла.
procedure TForm1.FormCreate(Sender: TObject);
var i,j:byte;
f:TextFile;
st:string;
После Begin записываем оператор цикла, нумерующий строки
for i := 1 to 7 do
StringGrid1.Cells[0,i]:= IntToStr(i);
и записывающий название дней недели в заголовки таблицы
for i := 1 to 6 do
StringGrid1.Cells[i,0]:=day[i];
Устанавливаем значение
GridEdit:=false;
После проверки наличия файла связываем переменную f с именем файла grid.sav', в котором будет храниться расписание, reset (f) откраивает файл для чтения, вложенный цикл читает построчно из файла в переменную st, а затем заносит их в таблицу. После чтения данный файл закрывается оператором CloseFile (f).
if FileExists('grid.sav') Then
begin
AssignFile(f,'grid.sav');
reset (f);
For i:=1 to 6 do
For j:=1 to 7 do
begin
readln (F,st );
StringGrid1.Cells[i,j]:=st;
end;
CloseFile (f);
end;
Для того, чтобы узнать, было ли редактирование создаем процедуру
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
GridEdit:=true;
end;
Для этого в инспекторе объектов для StringGrid1 находим событие onKeyPress. Сохранение расписания (при наличии изменений) будет происходить при закрытии формы. В инспекторе объектов для Form1 находим событие onClose.
Данная процедура бут выглядеть так:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i,j:byte;
f:TextFile;
begin
If GridEdit then
begin
AssignFile (f,'grid.sav');
rewrite (f);
For i:=1 to 6 do
For j:=1 to 7 do
writeln (f, StringGrid1.Cells[i,j]);
CloseFile (f);
end;
end;
В ней rewrite (f) открывает файл для записи, при этом существующий файл будет переписан.
WriteLn (f, StringGrid1.Cells[i,j])-записывает данные из ячеек в файл.
Можно дополнить проект раскраской по столбцам или строкам, используя для этого событие onDrawCell.
|
|