Здравствуйте. Не ругайте новичка, но я уже трое суток не могу решить проблему цикла с возвращением на метку. Дело в том, что в случае нудовлетворительного результата вычислений выдаётся сообщение с предложением исправить ошибки автоматически, но после каждого возвращения на вышестоящую метку и неудовлетворении условия при очередной итерации - опять выдаётся это сообщение:
Цитата: if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
Как мне сделать, чтобы откат TFmu, например с 1.00 до 0.25 проходил в тихом режиме, и не выскакивало сообщение при каждом последующем TFmu:= TFmu - 0.01;
Очень нужна ваша помощь. Диплом стоит из за этого GoTo, а по-другому я что-то никак не соображу.
Вот полный код обработчика:
(извините, если громоздко получится...)
[more]procedure TForm1.SpeedButton1Click(Sender: TObject);
Var
TFb1,TFb2,TFbw2,
modul,TFmu,
TFat1,TFat2,TFda1,TFda2,
TFawt1,TFawt2,TFCE,TFa,
TFaa1,TFaa2,TFrb1,TFrb2,
TFbb1,TFbb2,TFaw,TFSIa1,TFSIa2,TFU,
TFmt1,TFmt2,TFx1max: real;
TFal1,TFal2,TFap1,TFap2: double;
TFz1,TFz2,
Gap1,Map1,Sap1,
Gap2,Map2,Sap2: Integer;
TrebKPer,RaspPolus,OPodrez1,OPodrez2,
KPerekr,OInterf1,OInterf2,
OZaostr1,OZaostr2: string;
TFFlagPolusa,TFFlagObrabotki: Boolean;
Label LPodrez;
begin
LPodrez:
TFMezhUgol:= StrToFloat(EMezhUgol.Text);
TFbw1:= StrToFloat(Ebw1.Text);
TFmu:= StrToFloat(Em.Text);
TFz1:= StrToInt(EZ1.Text);
TFz2:= StrToInt(EZ2.Text);
TFU:= TFz2/TFz1;
TFa:=20;
If TFmu > 1.031 then
begin
application.MessageBox
('Значение будет исправлено на максимально допустимое.',
'Превышено максимальное значение коэффициента несовпадения',
MB_OK+MB_ICONINFORMATION);
TFmu:= 1.03;
Em.Text:= FloatToStr(TFmu);
exit;
end;
If TFU<=1.24 then TFU:= 1 else
If (TFU>=1.25) and (TFU<=1.74) then TFU:= 1.5 else
If (TFU>=1.75) and (TFU<=2.49) then TFU:= 2.0 else
If (TFU>=2.50) and (TFU<=3.49) then TFU:= 3.0 else
If (TFU>=3.50) then TFU:= 4.0;
If DBCBModul1.Enabled = True then
modul:=StrToFloat(DBCBModul1.Text)
else modul:=StrToFloat(DBCBModul2.Text);
If RGPolus.ItemIndex = 0 then
TFFlagPolusa:= True else
TFFlagPolusa:= False;
If ChBObr.Checked = True then
TFFlagObrabotki:= True else
TFFlagObrabotki:= False;
Raschet_bi(TFmu,TFbw1, TFMezhUgol, TFb1, TFb2, TFbw2);
GradMinSec(TFb1,Gb1,Mb1,Sb1);
GradMinSec(TFb2,Gb2,Mb2,Sb2);
GradMinSec(TFbw1,Gbw1,Mbw1,Sbw1);
GradMinSec(TFbw2,Gbw2,Mbw2,Sbw2);
Raschet_di(modul, TFz1, TFb1, TFd1);
TFd1:= RoundTo(TFd1,-2);
Raschet_di(modul, TFz2, TFb2, TFd2);
TFd2:= RoundTo(TFd2,-2);
Raschet_dbi(modul,TFz1,TFz2,TFb1,TFb2,TFdb1,TFdb2,TFat1,TFat2);
TFdb1:= RoundTo(TFdb1,-2);
TFdb2:= RoundTo(TFdb2,-2);
Raschet_CE(TFz1,TFz2,TFat1,TFat2,TFa,TFb1,TFb2,TFbw1,TFbw2, TFawt1,TFawt2,TFCE);
Raschet_xi(modul,TFmu,TFz1,TFz2,TFU,TFbw1,TFbw2,TFCE,TFdb1,TFdb2,TFawt1,TFawt2,
TFMezhUgol,TFb1,TFb2,{TFdf1,TFdf2,}TFFlagPolusa,TFda1,TFda2,TFx1,TFx2,TFaa1,TFaa2,
TFrb1,TFrb2,TFbb1,TFbb2,TFaw);
TFx1:= RoundTo(TFx1,-2);
TFx2:= RoundTo(TFx2,-2);
TFda1:= RoundTo(TFda1,-2);
TFda2:= RoundTo(TFda2,-2);
Raschet_dfi(modul,TFd1,TFd2,TFx1,TFx2,TFdf1,TFdf2);
TFdf1:= RoundTo(TFdf1,-2);
TFdf2:= RoundTo(TFdf2,-2);
Raschet_Sti(modul,TFb1,TFb2,TFx1,TFx2,TFat1,TFat2,TFSt1,TFSt2);
TFSt1:= RoundTo(TFSt1,-2);
TFSt2:= RoundTo(TFSt2,-2);
Raschet_bewi(TFrb1,TFrb2,TFaa1,TFaa2,TFawt1,TFawt2,TFbb1,TFbb2,
TFbew1,TFbeIw1,TFbew2,TFbeIw2);
TFbew1:= RoundTo(TFbew1,-2);
TFbeIw1:= RoundTo(TFbeIw1,-2);
TFbew2:= RoundTo(TFbew2,-2);
TFbeIw2:= RoundTo(TFbeIw2,-2);
Raschet_ali(TFat1,TFat2,TFx1,TFx2,TFb1,TFb2,TFz1,TFz2,TFal1,TFal2);
GradMinSec(TFal1,Gal1,Mal1,Sal1);
GradMinSec(TFal2,Gal2,Mal2,Sal2);
Raschet_ximin(TFz1,TFz2,TFat1,TFat2,TFb1,TFb2,TFx1min,TFx2min);
TFx1min:= RoundTo(TFx1min,-2);
TFx2min:= RoundTo(TFx2min,-2);
Raschet_ximax(TFCE,TFaw,modul,TFz1,TFz2,TFb1,TFb2,TFat1,TFat2,TFx1max);
TFx1max:= RoundTo(TFx1max,-2);
Epsilon:= R_Epsilon(TFz1,TFz2,TFaa1,TFaa2,TFawt1,TFawt2,TFbb1,TFbb2);
Epsilon:= RoundTo(Epsilon, -2);
Raschet_api(TFawt1,TFawt2,TFz1,TFz2,TFbb1,TFbb2,TFaa1,TFaa2,TFap1,TFap2);
GradMinSec(TFap1,Gap1,Map1,Sap1);
GradMinSec(TFap2,Gap2,Map2,Sap2);
Raschet_Sati(modul,TFb1,TFb2,TFda1,TFda2,TFz1,TFz2,TFx1,TFx2,TFal1,TFal2,TFaa1,TFaa2,
TFFlagObrabotki,TFSat1,TFSat2,TFmt1,TFmt2,TFSIa1,TFSIa2,TFSat1min,TFSat2min);
TFSat1:= RoundTo(Abs(TFSat1),-2);
TFSat2:= RoundTo(Abs(TFSat2),-2);
TFSIa1:= RoundTo(Abs(TFSIa1),-2);
TFSIa2:= RoundTo(Abs(TFSIa2),-2);
TFSat1min:= RoundTo(Abs(TFSat1min),-2);
TFSat2min:= RoundTo(Abs(TFSat2min),-2);
//------------------------------------------------------------------------------
If (TFx1>=TFx1min) and (TFal1>=0) then
OPodrez1:= 'На первом колесе подрез отсутствует;'
else
OPodrez1:= 'На первом колесе может быть подрез зубьев;';
If (TFx2>=TFx2min) and (TFal2>=0) then
OPodrez2:= 'На втором колесе подрез отсутствует;'
else
OPodrez2:= 'На втором колесе может быть подрез зубьев;';
If (OPodrez1 = 'На первом колесе подрез отсутствует;') and
(OPodrez2 = 'На втором колесе подрез отсутствует;')
then begin
TFOPodrez:= True;
IPodrez.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFOPodrez:= False;
IPodrez.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
If Epsilon>=0 then
KPerekr:= 'Значение коэффициента перекрытия корректно;'
else
KPerekr:= 'Коэффициент перекрытия ниже минимального значения;';
If KPerekr = 'Значение коэффициента перекрытия корректно;'
then begin
TFKPerekr:= True;
IKoPer.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFKPerekr:= False;
IKoPer.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
if TFSat1>=TFsat1min then
OZaostr1:= 'Заострение зубьев на первом колесе отсутствует;'
else
OZaostr1:= 'На первом колесе может быть заострение зубьев;';
if TFSat2>=TFsat2min then
OZaostr2:= 'Заострение зубьев на втором колесе отсутствует;'
else
OZaostr2:= 'На втором колесе может быть заострение зубьев;';
If (OZaostr1 = 'Заострение зубьев на первом колесе отсутствует;') and
(OZaostr2 = 'Заострение зубьев на втором колесе отсутствует;')
then begin
TFOZaostr:= True;
IZaostr.Picture.LoadFromFile('Images/Checked.bmp');
end
else begin
TFOZaostr:= False;
IZaostr.Picture.LoadFromFile('Images/Error.bmp');
end;
//------------------------------------------------------------------------------
//==============================================================================
TrebKPer:=RGTreb.Items.ValueFromIndex[RGTreb.ItemIndex];
RaspPolus:= RGPolus.Items.ValueFromIndex[RGPolus.ItemIndex];
MKomment.Lines.Clear;
MKomment.Paragraph.Alignment:= taCenter;
if TFOPodrez = False then
begin
MKomment.Lines.Add(' Условие отсутствия подрезания зубьев: '+#13#10);
MKomment.Lines.Add(
' ali >= 0;'+#13#10+
' xi>=ximin;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' al1 = '+FloatToStr(RoundTo(TFal1,-3))+';'+#9+
' al2 = '+FloatToStr(RoundTo(TFal2,-3))+';'+#13#10+
' x1 = '+FloatToStr(TFx1)+';'+#9+' x1min = '+FloatToStr(TFx1min)+';'+#13#10+
' x2 = '+FloatToStr(TFx2)+';'+#9+' x2min = '+FloatToStr(TFx2min)+';'+#13#10);
if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
end;
if TFKPerekr = False then
begin
MKomment.Lines.Add(' Минимальная величина коэффициента перекрытия: '+#13#10);
MKomment.Lines.Add(
' E = 1,2;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' E = '+FloatToStr(Epsilon)+';'+#13#10+
''+#13#10);
end;
if TFOZaostr = False then
begin
MKomment.Lines.Add( 'Условие отсутствия заострения зубьев: '+#13#10);
MKomment.Lines.Add(
' Sati >= Satimin;'+#13#10);
MKomment.Lines.Add(
' Результат вычислений: '+#13#10);
MKomment.Lines.Add(
' Sat1 = '+FloatToStr(TFSat1)+';'+#9+' Sat1min = '+FloatToStr(TFSat1min)+';'+#13#10+
' Sat2 = '+FloatToStr(TFSat2)+';'+#9+' Sat2min = '+FloatToStr(TFSat2min)+';'+#13#10+
''+#13#10);
if application.MessageBox('Попытаться исправить автоматически?',
'Ваша конфигурация не прошла проверку!',MB_YESNO+
MB_ICONQUESTION) = IDYES then
repeat
TFmu:= TFmu - 0.01;
Em.Text:= FloatToStr(TFmu);
goto LPodrez;
until TFOPodrez = True;
end;
end;
end.[/more]