Timer için her seferinde farkı süre oluşturma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Timer için her seferinde farkı süre oluşturma

Mesaj gönderen Serhat »

Selamlar.

Timer için her seferinde farkı süre oluşturmak istiyorum, bu sayılar timer Interval özelliğine uygun olarak yani 1000 , 5000, 10000 gibi benim belirlediğim sayılar içinden her seferinde bir sayı üretmesini nasıl sağlaya bilirim?

procedure TForm1.Sayi(Sender: TObject);
var
Uret: Real;
begin
Uret := RandomRange(29, 180);
Caption := floattostr(Uret * 1000);
end;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen SimaWB »

Kod: Tümünü seç

const
  Sureler = array[0..4] of integer = (
  	1000, 
  	5000, 
  	10000, 
  	30000, 
  	50000
  );

var
  sure: Integer;
begin
  sure := Sureler[RandomRange(0,5)];
There's no place like 127.0.0.1
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen Kuri_YJ »

Selamlar,

Timer evente girdiğinizde, Enabled'ını false yapın, yeni değerin Interval'e yerleştirin ve Procedure'den çıkmadan önce Tiöer'ınızı Enable edin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
xxxjedixxx
Üye
Mesajlar: 216
Kayıt: 10 Ara 2013 03:50

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen xxxjedixxx »

Merhaba,

SimaWB'nin verdiği örnek sabit belirli sayılar için doğrudur. Farklı olarak bir örnek olması açısından dinamik sayılar için bir örnek vermek istedim.

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
  Randomize;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
const MaxRange = 3; // max 3sn
begin
  Timer1.Interval := RandomRange(1, MaxRange + 1) * 1000;
  ...
end;
Timer'ı yeniden başlatmak için Enable Disable etmeye gerek yoktur. Interval değiştiğinde sayaç yeniden başlar. Sadece Timer Event'de yapılan iş uzun sürüyorsa o zaman durdurup başlatmak gerekir.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen Kuri_YJ »

Aynen. Ben timer içinde ne kadar süre alacak bir işlem yapıldığını bilmediğimden kapatmasını tavsiye ettim. ;)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Serhat
Üye
Mesajlar: 203
Kayıt: 27 Tem 2014 11:10

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen Serhat »

Teşekkür ederim emeği geçen herkese...

Kod: Tümünü seç

const
  Sureler: Array [0 .. 6] of Integer = (30000, 40000, 50000, 60000, 70000,
    80000, 90000);
var
  Sure: Integer;
begin
  Sure := Sureler[RandomRange(0, 5)];
  Timer1.Interval := Sure;
end
;
Kullanıcı avatarı
SimaWB
Üye
Mesajlar: 1316
Kayıt: 07 May 2009 10:42
Konum: İstanbul
İletişim:

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen SimaWB »

RandomRange(0, 5) komutunun üreteceği değerler: 0,1,2,3,4 'tür. Ama sizin kodda Sureler dizisinin boyutu 6'ya kadar gidiyor. Buna dikkat!
There's no place like 127.0.0.1
carsoft
Üye
Mesajlar: 138
Kayıt: 01 Ağu 2014 12:27

Re: Timer için her seferinde farkı süre oluşturma

Mesaj gönderen carsoft »

Kod: Tümünü seç

procedure TForm1.FormCreate(Sender: TObject);
begin
          Randomize;

          Timer1.Interval := 0;
          Timer1.Enabled  := False;

          while Timer1.Interval < 10000 do
                Timer1.Interval := Random(100000);

          Timer1.Enabled  := True;
end;
Cevapla