unit Tabliza1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, ComCtrls, Menus, DateUtils, Calendar, Mask;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
GroupBox1: TGroupBox;
ComboBox1: TComboBox;
Label1: TLabel;
Label2: TLabel;
Edit1: TEdit;
DateTimePicker1: TDateTimePicker;
DateTimePicker2: TDateTimePicker;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N6: TMenuItem;
Button1: TButton;
Button2: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button3: TButton;
Edit2: TEdit;
procedure FormCreate(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
procedure DateTimePicker1Change(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure StringGrid1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{******************************************************************************}
procedure TForm1.FormCreate(Sender: TObject);
begin
DateTimePicker1.Date:=Date;
DateTimePicker2.Date:=DateTimePicker1.Date+10;
end;
//Показываем диалог сохранения файла.
procedure TForm1.N3Click(Sender: TObject);
begin
SaveDialog1.Execute;
end;
//Сохраняем таблицу в файл *.txt
procedure TForm1.SaveDialog1CanClose(Sender: TObject; var CanClose: Boolean);
var
i, LastRow: Integer;
SList: TStringList;
begin
SList := TStringList.Create;
LastRow := StringGrid1.RowCount - 1;
try
for i := 0 to LastRow do
SList.Add(StringGrid1.Rows[i].CommaText);
SList.SaveToFile(SaveDialog1.FileName);
finally
SList.Free;
end;
end;
//Заполняем таблицу из файла *.txt
procedure TForm1.N2Click(Sender: TObject);
var
i, LastRow, CommaPos: Integer;
FirstStr: string;
SList: TStringList;
begin
if not OpenDialog1.Execute then Exit;
SList := TStringList.Create;
try
SList.LoadFromFile(OpenDialog1.FileName);
StringGrid1.RowCount := SList.Count;
FirstStr := SList.Strings[0];
i := 0; CommaPos := Pos(',', FirstStr);
while CommaPos <> 0 do
begin
Delete(FirstStr, 1, CommaPos);
Inc(i);
CommaPos := Pos(',', FirstStr);
end;
StringGrid1.ColCount := i + 1;
LastRow := StringGrid1.RowCount - 1;
for i := 0 to LastRow do
StringGrid1.Rows[i].CommaText := SList.Strings[i];
finally
SList.Free;
end;
end;
//Добавляем строку в StringGrid1
procedure TForm1.Button1Click(Sender: TObject);
var
rt: Integer;
begin
with StringGrid1 do
begin
if RowCount>2 then
begin
rt:=RowCount;
Edit4.Text:=InttoStr(rt);
Cells[0,rt-1]:=InttoStr(rt-1);
Cells[1,rt-1]:=Edit1.Text;
Cells[2,rt-1]:=ComboBox1.Text;
Cells[3,rt-1]:=DateToStr(DateTimePicker1.Date);
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Cells[4,rcnt-1]:=DateToStr(DateTimePicker2.Date);
Label14.Caption:=IntToStr(DaysBetween(Date,DateTimePicker2.Date));
Cells[5,rt-1]:=Label1.Caption;
RowCount:=RowCount+1;
end;
if RowCount=2 then
begin
rt:=RowCount-1;
Edit4.Text:=InttoStr(rt);
Cells[0,rt]:=InttoStr(rt);
Cells[1,rt]:=Edit1.Text;
Cells[2,rt]:=ComboBox1.Text;
Cells[35,rt]:=DateToStr(DateTimePicker1.Date);
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Cells[4,rt]:=DateToStr(DateTimePicker2.Date);
Label1.Caption:=IntToStr(DaysBetween(Date,DateTimePicker2.Date));
Cells[5,rt]:=Label14.Caption;
RowCount:=RowCount+1;
end;
end;
end;
//
procedure Lka (Sg: TStringGrid);
var
L, S: Integer;
StringGrid1: TStringGrid;
Label2: TLabel;
begin
for L:=1 to StringGrid1.RowCount do
begin
S:=StrToInt(StringGrid1.Cells[5,L]);
if S<=10 then
begin
Label2.Visible:=true;
Label2.Caption:='до записи осталось меньше 10 дней!';
break;
end;
end;
end;
//При изменении даты DateTimePicker1 высчитываем дату следующей записи
// и кол-во дней до следующей записи
procedure TForm1.DateTimePicker1Change(Sender: TObject);
begin
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Label14.Caption:=IntToStr(DaysBetween(Date,DateTimePicker2.Date));
end;
//Удаляем строку со здвигом
procedure SGDeleteRow(SG: TStringGrid; RowToDelete: Integer);
var
i: Integer;
begin
if (RowToDelete > 0) and (RowToDelete < SG.RowCount) then
begin
i:=RowToDelete;
while i < SG.RowCount do
begin
SG.Rows[i].Assign(SG.Rows[i+1]);
SG.Cells[0,i]:=IntToStr(i);
i:=i+1;
end;
end;
SG.RowCount := SG.RowCount - 1;
end;
procedure TForm1.Button3Click(Sender: TObject);
var RowToDelete: Integer;
begin
if StringGrid1.RowCount <=2 then
ShowMessage('Нельзя удалить все строки из списка!')
else
begin
RowToDelete:=StringGrid1.Selection.Top;
SGDeleteRow(StringGrid1,RowToDelete);
end;
end;
//Переносим данные субъекта из строки таблицы в панель редактирования}
procedure TForm1.StringGrid1Click(Sender: TObject);
var RowToEdit: Integer;
begin
RowToEdit:=StringGrid1.Selection.Top;
Edit1.Text:=StringGrid1.Cells[1,RowToEdit];
ComboBox3.Text:=StringGrid1.Cells[2,RowToEdit];
if StringGrid1.Cells[5,RowToEdit] = '' then
begin
DateTimePicker1.Date:=Date;
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Label1.Caption:=IntToStr(DaysBetween(Date,DateTimePicker2.Date));
end
else
begin
DateTimePicker1.Date:=StrToDate(StringGrid1.Cells[5,RowToEdit]);
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Label1.Caption:=StringGrid1.Cells[5,RowToEdit];
end;
end;
//Обновляем отредактированную строку, переносим данные в таблицу
procedure TForm1.Button2Click(Sender: TObject);
var nst: Integer;
begin
with StringGrid1 do
begin
nst:=StrToInt(Edit4.Text);
Cells[0,nst]:=InttoStr(nst);
Cells[1,nst]:=Edit1.Text;
Cells[2,nst]:=ComboBox1.Text;
Cells[3,nst]:=DateToStr(DateTimePicker1.Date);
Cells[4,nst]:=DateToStr(DateTimePicker2.Date);
Cells[5,nst]:=Label1.Caption;
end;
Edit4.Text:='';
Edit1.Text:='';
ComboBox1.ItemIndex:= -1;
DateTimePicker1.Date:=Date;
DateTimePicker2.Date:=DateTimePicker1.Date+10;
Label1.Caption:=IntToStr(DaysBetween(Date,DateTimePicker2.Date));
Lka;
end;
// Закрываем программу
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var buttomSel: Integer;
begin
buttomSel:= MessageDlg('Сохранить список перед закрытием?'
,mtCustom, [mbOk], 0);
// Показ типа выбранной кнопки
if buttomSel = mrOK then
SaveDialog1.Execute;
end;
end.