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.
---------------------