Показать сообщение отдельно
  #9  
Старый 13.04.2009, 03:11
Аватар для rasamaha
rasamaha rasamaha вне форума
Прохожий
 
Регистрация: 28.03.2009
Сообщения: 19
Репутация: 10
По умолчанию

вот код программы:

Код:
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.

есть панель редактирования со Editoм, ComboBoxом и календарями.
Моя собственная процедура Lka, не работает...

что я тут не так сделал?
Ответить с цитированием