Timer, a randomrange

0

Witam.

Mam problem z kodem. Chciałbym, by "randomrange" nie był określany co chwila nowy (co częstotliwość intervalu timera). Chcę, by nowy randomrange był stosowany tylko i wyłącznie po użyciu funkcji.
Już przedstawiam o co chodzi:

procedure TForm1.Timer2Timer(Sender: TObject);
var
I1:integer;
I2:integer;
begin
Randomize;
Timer2.Interval := RandomRange(SpinEdit2.Value, SpinEdit12.Value);
I1 := StrToInt(label7.Caption);     //current
I2 := StrToInt(label22.Caption);    //maxhp

if (label7.Caption = '0') then
begin
Label1.Visible := true;
CheckBox1.Checked := false;
Checkbox2.Checked := false;
CheckBox3.Checked := false;
CheckBox4.Checked := false;
CheckBox5.Checked := false;
application.Title:='ERROR';
Showmessage('ERROR.')
end
else
if (strtoint(label7.Caption)) >= 0 then
begin
Label38.Caption := (FloatToStr(RandomRange(SpinEdit1.Value-10,SpinEdit1.Value+5)));
if (I1/I2*100)  <= RandomRange(SpinEdit1.Value-10,SpinEdit1.Value+5) then
begin
Listbox3.Items.Add('Heal used at: ' + FloatToStr(I1/I2*100) + '%');
end;
end;
end;

Dajmy na to SpinEdit1.Value wynosi 80. Chciałbym, by raz wykonywało funkcję, gdy wyniesie on np. 70, a raz gdy 85, raz gdy 72, raz gdy 82 itp. Żeby była to randomowa luczba pomiędzy 70-85.
Niestety, ale gdy częstotliwość odświeżania timera jest mała, to ten numer również się zmienia bardzo szybko. Mi zależy na tym, by nie zmieniał się on wraz z intervalem timeru. Da radę zrobić coś takiego?

Dzięki.

0

A co ile ma się wywoływać? Możesz wrzucić drugi Timer i w nim modyfikować co zadany odstęp czasu Interval pierwszego.

1

Spróbuj napisać jeszcze raz o co chodzi bo naprawdę nie rozumiem. Na wstępie zaznaczam że ten kod wygląda tragicznie a najgorszym z błędem jest wywołanie funkcji Randomize w każdym cyklu Timera tą funkię wywołuje się tylko raz podczas pracy programu.

0

jeśli dobrze zrozumiałem to masz Timera który z ze stałym odstępem czas wykonuje określony kod i chcesz aby na żądanie użytkownika odstęp czasowy tego timera (timer.interwal) był jednorazowo losowo zmieniony

jeśli chodzi o zaprezentowany kod to po pierwsze wywal z niego randomize i przenieś do np. OnCreate formy albo innego miejsca w kodzie tak aby był wykonany tylko raz (o czym pisał @kAzek ), oraz wywal podstawienie Timer.Interval:=cośtam.
W kodzie Timera zostaw tylko to co kod ma zrobić, a zarządzanie interwałem timera wyrzuć do oddzielnej metody/procedury

procedure TForm3.Button2Click(Sender: TObject);
var
  lAnyInterval: integer;
begin
   lAnyInterval := (wyliczenie interwału, może być z random albo w zupełnie inny sposób);  
   self.Timer2.Interval := lAnyInterval;
 end;

procedure TForm3.Timer2Timer(Sender: TObject);
begin
  self.Timer2.Enabled := false;
  /// tutaj kod timera
  ///
  ///
  ///
  self.Timer2.Enabled := true;

end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1