//Цвет
procedure TForm1.N16Click(Sender: TObject);
begin
WITH ColorDialog1 DO
Begin
IF NOT Execute THEN Exit;
Edit1.Color:=Color;
StringGrid1.Color:=Color;
StringGrid2.Color:=Color
end;
end;
//Расчета параметров сетевого графика
procedure TForm1.N17Click(Sender: TObject);
Var ran: Array[1..100] OF integer;
begin
N3.Enabled:=True;
BitBtn2.Enabled:=True;
//Проверка наличия введенных значений
Pr:=0;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
IF StringGrid1.Cells[i,j]='' THEN
Pr:=Pr+1;
IF Pr=n*n THEN //Если не введено ни одного значения
ShowMessage('Введите продолжительность событий')
ELSE
Begin
IF StringGrid2.Height>StringGrid1.Heig ht THEN
Form1.Height:=StringGrid2.Height;
IF StringGrid2.Width>StringGrid1.Width THEN
Form1.Width:=StringGrid2.Width+10;
StringGrid2.Cells[2,n]:=StringGrid2.Cells[1,n];
StringGrid2.Cells[2,1]:='0';
//Расчет ранних сроков наступления события
FOR j:=1 TO n DO
begin
k:=1;
FOR i:=1 TO n DO
ran[i]:=0;
StringGrid2.Cells[1,j]:='0';//начальное значение
FOR i:=1 TO n DO
begin
IF ((i<j)AND(StringGrid1.Cells[j,i]<>'')) THEN
begin
ran[k]:=StrToInt(StringGrid2.Cells[1,i])+StrToInt(StringGrid1.Cells[j,i]);
IF k=1 THEN StringGrid2.Cells[1,j]:=IntToStr(ran[k]);
//Определение максимального элемента
IF ((k>1)AND(ran[k]>StrToInt(StringGrid2.Cells[1,j]))) THEN
StringGrid2.Cells[1,j]:=IntToStr(ran[k]);
k:=k+1;
end;
end;
end;
StringGrid1.Visible:=False;
StringGrid2.Visible:=True;
//Расчет поздних сроков наступления события
StringGrid2.Cells[2,n]:=StringGrid2.Cells[1,n];
j:=n-1;
WHILE j>1 DO
begin
k:=1;
FOR i:=1 TO n DO
ran[i]:=0;
StringGrid2.Cells[2,j]:='0';
i:=n;
WHILE i>1 DO
begin
IF StringGrid1.Cells[i,j]<>'' THEN
begin
ran[k]:=StrToInt(StringGrid2.Cells[2,i])-StrToInt(StringGrid1.Cells[i,j]);
StringGrid2.Cells[2,j]:=IntToStr(ran[k]);
IF ((k>1)AND(ran[k]<ran[k-1])) THEN
StringGrid2.Cells[2,j]:=IntToStr(ran[k])
else
IF ((k>1)AND(ran[k-1]<ran[k])) THEN
StringGrid2.Cells[2,j]:=IntToStr(ran[k-1]);
k:=k+1;
end;
i:=i-1;
end;
j:=j-1;
end;
k:=1;
FOR i:=1 TO n DO
FOR j:=1 TO n DO
IF StringGrid1.Cells[j,i]<>'' THEN//Если путь имеется на заданном графе
begin
//Путь
StringGrid2.Cells[3,k]:=IntToStr(i)+', '+IntToStr(j);
//Продолжительность пути
StringGrid2.Cells[4,k]:=StringGrid1.Cells[j,i];
//Раннее начало работы
FOR p:=1 TO n DO
if StrToInt(StringGrid2.Cells[0,p])=i THEN
StringGrid2.Cells[5,k]:=StringGrid2.Cells[1,p];
//Раннее окончание работы
StringGrid2.Cells[6,k]:=IntToStr(Strtoint(StringGrid2.Cel ls[5,k])+StrtoInt(StringGrid2.Cells[4,k]));
//Позднее окончание
FOR p:=1 TO n DO
IF StrToInt(StringGrid2.Cells[0,p])=j THEN
StringGrid2.Cells[8,k]:=StringGrid2.Cells[2,p];
//Позднее начало
StringGrid2.Cells[7,k]:=IntToStr(Strtoint(StringGrid2.Cel ls[8,k])-StrtoInt(StringGrid2.Cells[4,k]));
//Полный резерв
StringGrid2.Cells[9,k]:=IntToStr(Strtoint(StringGrid2.Cel ls[8,k])-StrtoInt(StringGrid2.Cells[6,k]));
//Свободный резерв
FOR p:=1 TO n DO
IF StrToInt(StringGrid2.Cells[0,p])=j THEN
StringGrid2.Cells[10,k]:=IntToStr(Strtoint(StringGrid2.Cel ls[1,p])-StrtoInt(StringGrid2.Cells[6,k]));
k:=k+1;
end;
//Критический путь
Label3.Left:=90;
Label3.Width:=Form1.Width;
Label3.Caption:='Критический путь';
FOR i:=1 TO n DO
IF StrToInt(StringGrid2.Cells[1,i])=StrToInt(StringGrid2.Cells[2,i]) THEN
Label3.Caption:=Label3.Caption+' - '+StringGrid2.Cells[0,i];
Label3.Enabled:=True;
end;
end;
//Копирование в буфер обмена
procedure TForm1.N19Click(Sender: TObject);
var bitmap:tbitmap;
begin
bitmap:=tbitmap.create;
bitmap.width:=clientwidth;
bitmap.height:=clientheight;
TRY
WITH bitmap.Canvas DO
CopyRect (clientrect,canvas,clientrect);
clipboard.Assign(bitmap);
FINALLY
bitmap.free;
end;
end;
//Изменение шрифта
procedure TForm1.N20Click(Sender: TObject);
begin
WITH FontDialog1 DO