program Det_model_events;

uses
  Forms,
  Unit1 in 'Unit1.pas' {Form1},
  Unit2 in 'Unit2.pas' {Form2};

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Application.CreateForm(TForm2, Form2);
  Application.Run;
end.
------------------------------------

unit Unit1; // Основной вариант модуля.

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, jpeg;

Const
      ME_POKAZA = WM_USER + 120;
      ME_POKAZB = WM_USER + 180;
      ME_POKAZC  = WM_USER + 260;
      ME_POKAZTIME1 = WM_USER + 140;

      ME_POKAZAB1 =  WM_USER + 160;
      ME_POKAZAB2 =  WM_USER + 165;
      ME_POKAZBC1 =  WM_USER + 220;
      ME_POKAZBC2 =  WM_USER + 230;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    edTemp: TEdit;
    Timer1: TTimer;
    btnStart: TButton;
    reZadanie: TRichEdit;
    btnExit: TButton;
    imEA: TImage;
    pbEA: TProgressBar;
    pbEB: TProgressBar;
    stEA: TStaticText;
    StaticText1: TStaticText;
    Label2: TLabel;
    edT1: TEdit;
    Label3: TLabel;
    edTTT: TEdit;
    Label4: TLabel;
    edT2: TEdit;
    Label5: TLabel;
    edT3: TEdit;
    Label6: TLabel;
    edT6: TEdit;
    Label7: TLabel;
    edT4: TEdit;
    Label8: TLabel;
    edT5: TEdit;
    imEB: TImage;
    StaticText2: TStaticText;
    stEB: TStaticText;
    imAB1: TImage;
    imAB2: TImage;
    imPaket: TImage;
    Label9: TLabel;
    edEA: TEdit;
    Label10: TLabel;
    edEB: TEdit;
    Label11: TLabel;
    edEP: TEdit;
    imC: TImage;
    pbC: TProgressBar;
    StaticText3: TStaticText;
    stC: TStaticText;
    imBC1: TImage;
    imBC2: TImage;
    Label12: TLabel;
    edPaket: TEdit;
    stBC1: TStaticText;
    stBC2: TStaticText;
    stAB2: TStaticText;
    stAB1: TStaticText;
    btnStop: TButton;
    btnBlock: TButton;
    btnSave: TButton;
    procedure btnStartClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
    procedure btnBlockClick(Sender: TObject);
    procedure btnSaveClick(Sender: TObject);
  private
    { Private declarations }
    procedure MEDobava();
    procedure MEPokazA(var Msg: TMessage); message ME_POKAZA;
    procedure MEPokazB(var Msg: TMessage); message ME_POKAZB;
    procedure MEPokazC(var Msg: TMessage); message ME_POKAZC;
    procedure MEPokazTime1(var Msg: TMessage); message ME_POKAZTIME1;
    procedure MEZapuskAB1();
    procedure MEZapuskAB2();
    procedure MEZapuskBC1();
    procedure MEZapuskBC2();
    procedure MEPokazAB1(var Msg: TMessage); message ME_POKAZAB1;
    procedure MEPokazAB2(var Msg: TMessage); message ME_POKAZAB2;
    procedure MEPokazBC1(var Msg: TMessage); message ME_POKAZBC1;
    procedure MEPokazBC2(var Msg: TMessage); message ME_POKAZBC2;
    procedure MEStopAB1();
    procedure MEStopAB2();
    procedure MEStopBC1();
    procedure MEStopBC2();
    procedure MERezervBC1();
    procedure MERezervBC2();
    procedure Konec();
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation uses Unit2;

{$R *.dfm}

var
 // Time1 время текущее, мсек
Time1, TimePred, t1, t2, t3, t4, t5, t6, Acount, B1count, B2count,
TimeStartAB2, TimeStartAB1, TimeStartBC1, TimeStartBC2,
EmkEA, EmkEB, EmkEP, ResultCount, maxPaketov,
DlinaA, DlinaB, TRez:cardinal;

{вероятность подключения резервной аппаратуры,
время работы резервной аппаратуры,
средняя длина очередей в п. А и В.
}

LiniaAB1Zanata: Boolean = false;
LiniaAB2Zanata: Boolean = false;
LiniaAB1Activna: Boolean = false;
LiniaAB2Activna: Boolean = false;
LiniaBC1Zanata: Boolean = false;
LiniaBC1Activna: Boolean = false;
LiniaBC2Zanata: Boolean = false;
LiniaBC2Activna: Boolean = false;

First : Boolean = true;

procedure TForm1.MEDobavA();
begin
   TimePred := Time1;  Acount := Acount + 1;
   PostMessage(Form1.Handle,ME_POKAZA,0,0);
end;

procedure TForm1.MEPokazA(var Msg: TMessage);
begin
   pbEA.Position := Acount; // отображаю число пакетов в А
   stEA.Caption := IntToStr(Acount);  // отображаю число пакетов в А
   imPaket.Visible := true; Application.ProcessMessages;
   sleep(40);
   imPaket.Visible := false;
   if imPaket.Top < 160 then
   imPaket.Top := imPaket.Top + 2 else
   imPaket.Top := 16;
end;

procedure TForm1.MEPokazB(var Msg: TMessage);
begin
   pbEB.Position := B1count + B2Count; // отображаю число пакетов в B
   stEB.Caption := IntToStr(B1count + B2Count);
       // отображаю число пакетов в B
end;

procedure TForm1.MEPokazC(var Msg: TMessage);
begin
   pbC.Position := ResultCount; // отображаю число пакетов в B
   stC.Caption := IntToStr(ResultCount);
       // отображаю число пакетов в C
end;

procedure TForm1.MEPokazTime1(var Msg: TMessage);
begin
 edTTT.Text := IntToStr(Time1);
end;

procedure TForm1.MEZapuskAB1();
begin
  LiniaAB1Zanata:= true;
  TimeStartAB1:= Time1;
  Acount := Acount - 1;
  PostMessage(Form1.Handle,ME_POKAZAB1,0,0); //медленная операция - показ АВ1
  PostMessage(Form1.Handle,ME_POKAZA,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskAB2();
begin
  LiniaAB2Zanata:= true;
  TimeStartAB2:= Time1;
  Acount := Acount - 1;
  PostMessage(Form1.Handle,ME_POKAZAB2,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZA,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskBC1();
begin
  LiniaBC1Zanata:= true;
  TimeStartBC1:= Time1;
  B1count := B1count - 1;
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskBC2();
begin
  LiniaBC2Zanata:= true;
  TimeStartBC2:= Time1;
  B2count := B2count - 1;
  PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ А
end;

procedure TForm1.MEPokazAB1(var Msg: TMessage);
begin
 if LiniaAB1Zanata then
   begin  imAB1.Visible := true;  stAB1.Visible:= true;
   end else
   begin imAB1.Visible := false; stAB1.Visible:= false;
   end;
end;

procedure TForm1.MEPokazAB2(var Msg: TMessage);
begin
 if LiniaAB2Zanata then
   begin  imAB2.Visible := true;  stAB2.Visible:= true;
   end else
   begin imAB2.Visible := false; stAB2.Visible:= false;
   end;
end;

procedure TForm1.MEPokazBC1(var Msg: TMessage);
begin
 if LiniaBC1Zanata then
   begin  imBC1.Visible := true;  stBC1.Visible:= true;
   end else
   begin imBC1.Visible := false; stBC1.Visible:= false;
   end;
end;

procedure TForm1.MEPokazBC2(var Msg: TMessage);
begin
 if LiniaBC2Zanata then
   begin  imBC2.Visible := true;  stBC2.Visible:= true;
   end else
   begin imBC2.Visible := false; stBC2.Visible:= false;
   end;
end;

procedure TForm1.MEStopAB1();
begin
  LiniaAB1Zanata:= false;  B1count:= B1count + 1;
  PostMessage(Form1.Handle,ME_POKAZAB1,0,0); //медленная операция - показ В
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ В
end;

procedure TForm1.MEStopAB2();
begin
  LiniaAB2Zanata:= false;  B2count:= B2count + 1;
  PostMessage(Form1.Handle,ME_POKAZAB2,0,0); //медленная операция - показ AВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ В
end;

procedure TForm1.MEStopBC1();
begin
  LiniaBC1Zanata:= false;  ResultCount := ResultCount + 1;
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ BC1
  PostMessage(Form1.Handle,ME_POKAZC,0,0); //медленная операция - показ C
end;

procedure TForm1.MEStopBC2();
begin
  LiniaBC2Zanata:= false;  ResultCount := ResultCount + 1;
  PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ BC2
  PostMessage(Form1.Handle,ME_POKAZC,0,0); //медленная операция - показ C
end;

procedure TForm1.MERezervBC1();
begin
  if (B1count + B2count >= EmkEP) then
    begin t4:= t6; TRez := TRez + t6;
    end
    else t4:= StrToInt(edT4.Text);
    stBC1.Caption := IntToStr(t4);
end;

procedure TForm1.MERezervBC2();
begin
    if (B1count + B2count >= EmkEP) then
     begin t5:= t6; TRez := TRez + t6;
     end else t5:= StrToInt(edT5.Text);
     stBC2.Caption := IntToStr(t5); 
end;

procedure TForm1.Konec();
var bufsi: string;
begin
      Timer1.Enabled:= false;
      if First then reZadanie.Clear; First := false;

      reZadanie.Lines.Add(DateTimeToStr(Now) + ' Работа модели закончена. '+
      'Результаты:');

      reZadanie.SelStart := 0;  reZadanie.SelLength := 100000;
      reZadanie.SelAttributes.Color := clNavy;
      reZadanie.SelAttributes.Name := 'Courier New';
      reZadanie.SelAttributes.Size := 11;

      str(TRez:0,bufsi);
      reZadanie.Lines.Append('время работы резервной аппаратуры = '
         + bufsi); str(100*TRez/Time1:0:2,bufsi);
      reZadanie.Lines.Append( 'вероятность подключ резерв. = '
         +bufsi+'%'); str(DlinaA/Time1:0:2,bufsi);
      reZadanie.Lines.Append('средняя длина очередей A = '
         +bufsi);  str(DlinaB/Time1:0:2,bufsi);
      reZadanie.Lines.Append('средняя длина очередей B = '
         +bufsi);
      reZadanie.Lines.Append('======================================== ');
      reZadanie.Lines.Append('');
      
      btnStop.Enabled := false;
end;

procedure TForm1.btnStartClick(Sender: TObject);
begin

 btnStop.Enabled := true;

 Time1 := 0; Acount := 0; B1count := 0; B2count := 0;
 ResultCount := 0; TimePred := 52;

 t1:= StrToInt(edT1.Text);
 t2:= StrToInt(edT2.Text);
 t3:= StrToInt(edT3.Text);
 t4:= StrToInt(edT4.Text);
 t5:= StrToInt(edT5.Text);
 t6:= StrToInt(edT6.Text);

 stAB1.Caption := edT2.Text;
 stAB2.Caption := edT3.Text;
 stBC1.Caption := IntToStr(t4);
 stBC2.Caption := IntToStr(t5);

 EmkEA := StrToInt(edEA.Text);
 EmkEB := StrToInt(edEB.Text);
 EmkEP := StrToInt(edEP.Text);

 maxPaketov := StrToInt(edPaket.Text);

 pbEA.Max := EmkEA;
 pbEB.Max := EmkEB;
 pbC.Max := maxPaketov;

 DlinaA:=0; DlinaB:=0; TRez:=0;

 Timer1.Interval := Round(StrToFloat(edTemp.Text)*1000);
 Timer1.Enabled := true;
 LiniaAB1Zanata:= false;
 LiniaAB2Zanata:= false;
 LiniaBC1Zanata:= false;
 LiniaBC2Zanata:= false;

 TimeStartAB1 := 10000; // т е много-много
 TimeStartAB2 := 10000; // т е много-много
 TimeStartBC1 := 10000; // т е много-много
 TimeStartBC2 := 10000; // т е много-много

 PostMessage(Form1.Handle,ME_POKAZA,0,0);
 PostMessage(Form1.Handle,ME_POKAZB,0,0);
 PostMessage(Form1.Handle,ME_POKAZC,0,0);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if fileexists('Zadanie.rtf') then
  reZadanie.Lines.LoadFromFile('Zadanie.rtf') else
  showmessage('Кто-то удалил файл Zadanie.rtf'+#13#10+
  'в котором описано задание !');
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
 Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Time1 := Time1 + 1;

if (Time1 = TimePred + t1) then
  begin MEDOBAVA();
    TimePred := Time1;
  end;

PostMessage(Form1.Handle,ME_POKAZTIME1,0,0);

if not LiniaAB1Zanata AND ( Acount > 0 ) then
MEZAPUSKAB1();

if (not LiniaAB2Zanata) and (Acount > 0) then
MEZAPUSKAB2();

if (not LiniaBC1Zanata) and (B1count > 0) then
MEZAPUSKBC1();

if (not LiniaBC2Zanata) and (B2count > 0) then
MEZAPUSKBC2();

if LiniaAB1Zanata AND (Time1 = TimeStartAB1 + t2) then
MESTOPAB1();

if LiniaAB2Zanata AND (Time1 = TimeStartAB2 + t3) then
MESTOPAB2();

if LiniaBC1Zanata AND (Time1 = TimeStartBC1 + t4) then
MESTOPBC1();

if LiniaBC2Zanata AND (Time1 = TimeStartBC2 + t5) then
MESTOPBC2();

if  not LiniaBC1Zanata AND (B1count > 0) then MERezervBC1() else
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ BC1

if  not LiniaBC2Zanata AND (B2count > 0) then MERezervBC2() else
 PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ BC2

if ResultCount >= maxPaketov then  Konec();

     DlinaA:=  DlinaA + Acount;
     DlinaB:= DlinaB + B1count + B2count;

end;

procedure TForm1.btnBlockClick(Sender: TObject);
begin
 Form2.ShowModal;
end;

procedure TForm1.btnSaveClick(Sender: TObject);
var buf: string; ii, len: integer;
begin
  buf := DateTimeToStr(Now);
  len := length(buf);
  for ii:=1 to len do
    begin if buf[ii] = ':' then buf[ii]:= '-';
    end;
  reZadanie.Lines.SaveToFile('Отчет ' + buf+'.rtf');
end;

end.
---------------------------------

unit Unit1;

{Вариант с использованием сообщений}
interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, ComCtrls, jpeg;

Const ME_DOBAVA = WM_USER + 110;

      ME_POKAZA = WM_USER + 120;
      ME_POKAZB = WM_USER + 180;
      ME_POKAZC  = WM_USER + 260;

      ME_POKAZTIME1 = WM_USER + 140;

      ME_ZAPUSKAB1 = WM_USER + 150;
      ME_ZAPUSKAB2 =  WM_USER + 190;
      ME_ZAPUSKBC1 = WM_USER + 210;
      ME_ZAPUSKBC2 = WM_USER + 270;

      ME_POKAZAB1 =  WM_USER + 160;
      ME_POKAZAB2 =  WM_USER + 165;
      ME_POKAZBC1 =  WM_USER + 220;
      ME_POKAZBC2 =  WM_USER + 230;

      ME_STOPAB1 = WM_USER + 170;
      ME_STOPAB2 = WM_USER + 200;
      ME_STOPBC1 = WM_USER + 240;
      ME_STOPBC2 = WM_USER + 250;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    edTemp: TEdit;
    Timer1: TTimer;
    btnStart: TButton;
    reZadanie: TRichEdit;
    btnExit: TButton;
    imEA: TImage;
    pbEA: TProgressBar;
    pbEB: TProgressBar;
    stEA: TStaticText;
    StaticText1: TStaticText;
    Label2: TLabel;
    edT1: TEdit;
    Label3: TLabel;
    edTTT: TEdit;
    Label4: TLabel;
    edT2: TEdit;
    Label5: TLabel;
    edT3: TEdit;
    Label6: TLabel;
    edT6: TEdit;
    Label7: TLabel;
    edT4: TEdit;
    Label8: TLabel;
    edT5: TEdit;
    imEB: TImage;
    StaticText2: TStaticText;
    stEB: TStaticText;
    imAB1: TImage;
    imAB2: TImage;
    imPaket: TImage;
    Label9: TLabel;
    edEA: TEdit;
    Label10: TLabel;
    edEB: TEdit;
    Label11: TLabel;
    edEP: TEdit;
    imC: TImage;
    pbC: TProgressBar;
    StaticText3: TStaticText;
    stC: TStaticText;
    imBC1: TImage;
    imBC2: TImage;
    Label12: TLabel;
    edPaket: TEdit;
    stBC1: TStaticText;
    stBC2: TStaticText;
    stAB2: TStaticText;
    stAB1: TStaticText;
    btnStop: TButton;
    procedure btnStartClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure btnExitClick(Sender: TObject);
    procedure btnStopClick(Sender: TObject);
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
    procedure MEDobava(var Msg: TMessage); message ME_DOBAVA;
    procedure MEPokazA(var Msg: TMessage); message ME_POKAZA;
    procedure MEPokazB(var Msg: TMessage); message ME_POKAZB;
    procedure MEPokazC(var Msg: TMessage); message ME_POKAZC;
    procedure MEPokazTime1(var Msg: TMessage); message ME_POKAZTIME1;
    procedure MEZapuskAB1(var Msg: TMessage); message ME_ZAPUSKAB1;
    procedure MEZapuskAB2(var Msg: TMessage); message ME_ZAPUSKAB2;
    procedure MEZapuskBC1(var Msg: TMessage); message ME_ZAPUSKBC1;
    procedure MEZapuskBC2(var Msg: TMessage); message ME_ZAPUSKBC2;
    procedure MEPokazAB1(var Msg: TMessage); message ME_POKAZAB1;
    procedure MEPokazAB2(var Msg: TMessage); message ME_POKAZAB2;
    procedure MEPokazBC1(var Msg: TMessage); message ME_POKAZBC1;
    procedure MEPokazBC2(var Msg: TMessage); message ME_POKAZBC2;
    procedure MEStopAB1(var Msg: TMessage); message ME_STOPAB1;
    procedure MEStopAB2(var Msg: TMessage); message ME_STOPAB2;
    procedure MEStopBC1(var Msg: TMessage); message ME_STOPBC1;
    procedure MEStopBC2(var Msg: TMessage); message ME_STOPBC2;
    procedure MERezervBC1();
    procedure MERezervBC2();
    procedure Konec();
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
 // Time1 время текущее, мсек
Time1, TimePred, t1, t2, t3, t4, t5, t6, Acount, B1count, B2count,
TimeStartAB2, TimeStartAB1, TimeStartBC1, TimeStartBC2,
EmkEA, EmkEB, EmkEP, ResultCount, maxPaketov,
DlinaA, DlinaB, TRez:cardinal;

{вероятность подключения резервной аппаратуры,
время работы резервной аппаратуры,
средняя длина очередей в п. А и В.
}

LiniaAB1Zanata: Boolean = false;
LiniaAB2Zanata: Boolean = false;
LiniaAB1Activna: Boolean = false;
LiniaAB2Activna: Boolean = false;
LiniaBC1Zanata: Boolean = false;
LiniaBC1Activna: Boolean = false;
LiniaBC2Zanata: Boolean = false;
LiniaBC2Activna: Boolean = false;

procedure TForm1.MEDobavA(var Msg: TMessage);
begin
   TimePred := Time1;  Acount := Acount + 1;
   PostMessage(Form1.Handle,ME_POKAZA,0,0);
end;

procedure TForm1.MEPokazA(var Msg: TMessage);
begin
   pbEA.Position := Acount; // отображаю число пакетов в А
   stEA.Caption := IntToStr(Acount);  // отображаю число пакетов в А
end;

procedure TForm1.MEPokazB(var Msg: TMessage);
begin
   pbEB.Position := B1count + B2Count; // отображаю число пакетов в B
   stEB.Caption := IntToStr(B1count + B2Count);
       // отображаю число пакетов в B
end;

procedure TForm1.MEPokazC(var Msg: TMessage);
begin
   pbC.Position := ResultCount; // отображаю число пакетов в B
   stC.Caption := IntToStr(ResultCount);
       // отображаю число пакетов в C
end;

procedure TForm1.MEPokazTime1(var Msg: TMessage);
begin
 edTTT.Text := IntToStr(Time1);
end;

procedure TForm1.MEZapuskAB1(var Msg: TMessage);
begin
  LiniaAB1Zanata:= true;
  TimeStartAB1:= Time1;
  Acount := Acount - 1;
  PostMessage(Form1.Handle,ME_POKAZAB1,0,0); //медленная операция - показ АВ1
  PostMessage(Form1.Handle,ME_POKAZA,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskAB2(var Msg: TMessage);
begin
  LiniaAB2Zanata:= true;
  TimeStartAB2:= Time1;
  Acount := Acount - 1;
  PostMessage(Form1.Handle,ME_POKAZAB2,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZA,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskBC1(var Msg: TMessage);
begin
  LiniaBC1Zanata:= true;
  TimeStartBC1:= Time1;
  B1count := B1count - 1;
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ А
end;

procedure TForm1.MEZapuskBC2(var Msg: TMessage);
begin
  LiniaBC2Zanata:= true;
  TimeStartBC2:= Time1;
  B2count := B2count - 1;
  PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ АВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ А
end;

procedure TForm1.MEPokazAB1(var Msg: TMessage);
begin
 if LiniaAB1Zanata then
   begin  imAB1.Visible := true;  stAB1.Visible:= true;
   end else
   begin imAB1.Visible := false; stAB1.Visible:= false;
   end;
end;

procedure TForm1.MEPokazAB2(var Msg: TMessage);
begin
 if LiniaAB2Zanata then
   begin  imAB2.Visible := true;  stAB2.Visible:= true;
   end else
   begin imAB2.Visible := false; stAB2.Visible:= false;
   end;
end;

procedure TForm1.MEPokazBC1(var Msg: TMessage);
begin
 if LiniaBC1Zanata then
   begin  imBC1.Visible := true;  stBC1.Visible:= true;
   end else
   begin imBC1.Visible := false; stBC1.Visible:= false;
   end;
end;

procedure TForm1.MEPokazBC2(var Msg: TMessage);
begin
 if LiniaBC2Zanata then
   begin  imBC2.Visible := true;  stBC2.Visible:= true;
   end else
   begin imBC2.Visible := false; stBC2.Visible:= false;
   end;
end;

procedure TForm1.MEStopAB1(var Msg: TMessage);
begin
  LiniaAB1Zanata:= false;  B1count:= B1count + 1;
  PostMessage(Form1.Handle,ME_POKAZAB1,0,0); //медленная операция - показ В
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ В
end;

procedure TForm1.MEStopAB2(var Msg: TMessage);
begin
  LiniaAB2Zanata:= false;  B2count:= B2count + 1;
  PostMessage(Form1.Handle,ME_POKAZAB2,0,0); //медленная операция - показ AВ2
  PostMessage(Form1.Handle,ME_POKAZB,0,0); //медленная операция - показ В
end;

procedure TForm1.MEStopBC1(var Msg: TMessage);
begin
  LiniaBC1Zanata:= false;  ResultCount := ResultCount + 1;
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ BC1
  PostMessage(Form1.Handle,ME_POKAZC,0,0); //медленная операция - показ C
end;

procedure TForm1.MEStopBC2(var Msg: TMessage);
begin
  LiniaBC2Zanata:= false;  ResultCount := ResultCount + 1;
  PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ BC2
  PostMessage(Form1.Handle,ME_POKAZC,0,0); //медленная операция - показ C
end;

procedure TForm1.MERezervBC1();
begin
  if (B1count + B2count >= EmkEP) then
    begin t4:= t6; TRez := TRez + 1;
    end
    else t4:= StrToInt(edT4.Text);
    stBC1.Caption := IntToStr(t4);
end;

procedure TForm1.MERezervBC2();
begin
    if (B1count + B2count >= EmkEP) then
     begin t5:= t6; TRez := TRez + 1;
     end else t5:= StrToInt(edT5.Text);
     stBC2.Caption := IntToStr(t5); 
end;

procedure TForm1.Konec();
begin
      Timer1.Enabled:= false;
      reZadanie.Clear;
      reZadanie.Lines.Append('Работа модели закончена.');
      reZadanie.Lines.Append('Просмотрите результаты:');
      reZadanie.Lines.Append('время работы резервной аппаратуры = '
         + IntToStr(TRez));
      reZadanie.Lines.Append( 'вероятность подключ резерв. = '
         +FloatToStr(TRez/Time1));
      reZadanie.Lines.Append('средняя длина очередей A = '
         +FloatToStr(DlinaA/Time1));
      reZadanie.Lines.Append('средняя длина очередей B = '
         +FloatToStr(DlinaB/Time1));
end;

procedure TForm1.btnStartClick(Sender: TObject);
begin

 Time1 := 0; Acount := 0; B1count := 0; B2count := 0;
 TimePred := 52;

 t1:= StrToInt(edT1.Text);
 t2:= StrToInt(edT2.Text);
 t3:= StrToInt(edT3.Text);
 t4:= StrToInt(edT4.Text);
 t5:= StrToInt(edT5.Text);
 t6:= StrToInt(edT6.Text);

 stAB1.Caption := edT2.Text;
 stAB2.Caption := edT3.Text;
 stBC1.Caption := IntToStr(t4);
 stBC2.Caption := IntToStr(t5);

 EmkEA := StrToInt(edEA.Text);
 EmkEB := StrToInt(edEB.Text);
 EmkEP := StrToInt(edEP.Text);

 maxPaketov := StrToInt(edPaket.Text);

 pbEA.Max := EmkEA;
 pbEB.Max := EmkEB;
 pbC.Max := maxPaketov;

 DlinaA:=0; DlinaB:=0; TRez:=0;

 Timer1.Interval := Round(StrToFloat(edTemp.Text)*1000);
 Timer1.Enabled := true;
 LiniaAB1Zanata:= false;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  if fileexists('Zadanie.rtf') then
  reZadanie.Lines.LoadFromFile('Zadanie.rtf') else
  showmessage('Кто-то удалил файл Zadanie.rtf'+#13#10+
  'в котором описано задание !');
end;

procedure TForm1.btnExitClick(Sender: TObject);
begin
  Application.Terminate;
end;

procedure TForm1.btnStopClick(Sender: TObject);
begin
 Timer1.Enabled := not Timer1.Enabled;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Time1 := Time1 + 1;

if (Time1 = TimePred + t1) then
  begin Form1.Perform(ME_DOBAVA,0,0);
// т е посылаем сообщение ME_DOBAVA
   TimePred := Time1;
  end;

PostMessage(Form1.Handle,ME_POKAZTIME1,0,0);

if not LiniaAB1Zanata AND ( Acount > 0 ) then
Form1.Perform(ME_ZAPUSKAB1,0,0);

if (not LiniaAB2Zanata) and (Acount > 0) then
Form1.Perform(ME_ZAPUSKAB2,0,0);

if (not LiniaBC1Zanata) and (B1count > 0) then
Form1.Perform(ME_ZAPUSKBC1,0,0);

if (not LiniaBC2Zanata) and (B2count > 0) then
Form1.Perform(ME_ZAPUSKBC2,0,0);

if LiniaAB1Zanata AND (Time1 = TimeStartAB1 + t2) then
Form1.Perform(ME_STOPAB1,0,0);

if LiniaAB2Zanata AND (Time1 = TimeStartAB2 + t3) then
Form1.Perform(ME_STOPAB2,0,0);

if LiniaBC1Zanata AND (Time1 = TimeStartBC1 + t4) then
Form1.Perform(ME_STOPBC1,0,0);

if LiniaBC2Zanata AND (Time1 = TimeStartBC2 + t5) then
Form1.Perform(ME_STOPBC2,0,0);

if  not LiniaBC1Zanata then MERezervBC1() else
  PostMessage(Form1.Handle,ME_POKAZBC1,0,0); //медленная операция - показ BC1

if  not LiniaBC2Zanata then MERezervBC2() else
 PostMessage(Form1.Handle,ME_POKAZBC2,0,0); //медленная операция - показ BC2

if ResultCount >= maxPaketov then  Konec();

     DlinaA:=  DlinaA + Acount;
     DlinaB:= DlinaB + B1count + B2count;

end;

end.
----------------------------

unit Unit2;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, StdCtrls;

type
  TForm2 = class(TForm)
    ScrollBox1: TScrollBox;
    Button1: TButton;
    Image1: TImage;
    Button2: TButton;
    Button3: TButton;
    procedure Button3Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form2: TForm2;

implementation

{$R *.dfm}

procedure TForm2.Button3Click(Sender: TObject);
begin
 if fileexists('block_Sxema.bmp') then
  Image1.Picture.LoadFromFile('block_Sxema.bmp') else
  showmessage('Потерян файл схемы block_Sxema.bmp');
end;

procedure TForm2.Button2Click(Sender: TObject);
begin
 if fileexists('block_Sxema2.bmp') then
  Image1.Picture.LoadFromFile('block_Sxema2.bmp') else
  showmessage('Потерян файл схемы block_Sxema2.bmp');
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
   Button3Click(Sender);
end;

end.
---------------------
Hosted by uCoz