Timer Kullanmamak

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Timer Kullanmamak

Mesaj gönderen naturelmania »

İyi geceler arkadaşlar. Uzun zamandır bir program üzerine uğraşıyorum. Karıştırmadığım kitap bakmadığım site kalmadı. Belki de çok basit bir döngüyü düşünemiyorum.
Sorunum şu
Elimde karışık bir döngü var. Bu döngüyü timer gibi her saniye değil de belli bir sayıda tekrar ettirmek istiyorum. Mesela 12 kez dönsün ve sonra durup beni beklesin. Butona bir daha basıldığında bu kez 34 kez dönsün. Bunu nasıl yapabilirim?
Yardımcı olan arkadaşlara şimdiden bol bol teşekkür ederim :)
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
kahraman1285
Üye
Mesajlar: 360
Kayıt: 10 Nis 2006 09:07

Mesaj gönderen kahraman1285 »

Hocam eğer yanlış anlamadıysam siz basit bir for do döngüsü kuracaksınız.

Kod: Tümünü seç

procedure TURLAMA;
var 
Tur:integer;
SeferSayisi:integer;//global değişken olmalı

begin
case Sefersayisi of
begin
1:
begin
//diyelimkiilk seferde 12 tur atsın
for tur=1 to 12 do
begin
//yapılacak işlemler

end;
2:
for tur=1 to 34 do
begin
//yapılacak işlemler

end;

end ;
butonun altınada

Kod: Tümünü seç

sefersayisi=sefersayisi+1
kolay gelsin...
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Kod: Tümünü seç

dongu:=xx; //sayıyı  sen ata

for i:=1 to dongu 
do 
begin .... end;
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
ulu coder
Üye
Mesajlar: 838
Kayıt: 01 Nis 2006 06:46
Konum: Ankara

Re: Timer Kullanmamak

Mesaj gönderen ulu coder »

naturelmania yazdı:İyi geceler arkadaşlar. Uzun zamandır bir program üzerine uğraşıyorum. Karıştırmadığım kitap bakmadığım site kalmadı. Belki de çok basit bir döngüyü düşünemiyorum.
Ve cevap 'for-do' öyle mi?
Yok yau, soru eksiktir. :shock:
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Öncelikle cevap yazan arkadaşlara çok teşekkür ederim.
Arkadaşlar ben de sonradan for do ile kurmaya çalıştım fakat eksik bilgi vermişim sanırım. Ben döngünün içinden bazen çıkmam gerektiği için exit komutunu kullandım. Bu yüzden bu döngüyü 15 kez döndüremiyorum. Döngünün içinde exiti görünce çıkıyo 1 kere dönüyo :cry:
Acaba dedim dışarıya başka bir buton koyayım ve döngünün içindeki exit'in üst kısmına buton1.click yordamını mı ekleyeyim? ve for do döngüsünü de ikinci butona mı koyayım?
:roll:
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Matrix1536
Üye
Mesajlar: 19
Kayıt: 04 Tem 2007 11:32

Mesaj gönderen Matrix1536 »

timer da kullanabilirsin.

direk olarak =>

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin

//timer1.tag => kaçıncı kez basılıyor
//form1.tag => kaçıncı kez döngü dönüyor.

case timer1.Tag of
1:
begin
if form1.tag<12 then
begin
form1.tag:=form1.tag+1;
//işlemler -- memo1.lines.add(inttostr(form1.tag)+'. dönüşü');
end else
timer1.Enabled:=false;
end;

2:
begin
if form1.tag<34 then
begin
form1.tag:=form1.tag+1;
//işlemler -- memo1.lines.add(inttostr(form1.tag)+'. dönüşü');
end else
timer1.Enabled:=false;
end;
end;
end;
butona tıklanıldığında da =>

Kod: Tümünü seç

form1.tag:=0;
timer1.tag:=timer1.tag+1;
timer1.enabled:=true;
denedim çalışıyor...
ve istersen timer1.tag ve form1.tag yerine global integer değişkenler de kullanabilirsin...

hatta bu 12 ve 34 rastgele sayılar değilse.Yani belli bir kurala göre belirleniyorsa =>

Kod: Tümünü seç

procedure TForm1.Timer1Timer(Sender: TObject);
begin
//timer1.tag => kaçıncı kez basılıyor
//form1.tag => kaçıncı kez döngü dönüyor.
if form1.tag<timer1.Tag*5 then //bu koda göre döngü çalışma sayısı = butona kaçıncı kez basıldığı * 5.. Yani  1. dönüşünde 5 , 2. dönüşünde 10 , 3. dönüşünde 15 ... kere çalışacaktır döngü.
begin
form1.tag:=form1.tag+1;
//işlemler -- memo1.lines.add(inttostr(form1.tag)+'. dönüşü');
end else
timer1.Enabled:=false;

end;
butona tıklanıldığında =>

Kod: Tümünü seç

form1.Tag:=0;
timer1.Tag:=timer1.Tag+1;
timer1.Enabled:=true;
naturelmania
Üye
Mesajlar: 66
Kayıt: 27 Nis 2006 09:29

Mesaj gönderen naturelmania »

Önerdiğiniz döngü mükemmelmiş :D
Fakat benim eski döngümden ötürü 6000 satırlık döngüyü bozup tekrar kısa bi şekilde oluşturacak zamanım olmadığı için kullanamıyorum :cry:
Ama en kısa zamanda bunu kullanacağım :)
Programın döngüsünün kaç kez döndüğünü ".tag" sayesinde bilebildiğimizi bilmiyordum. Yeni bişi daha öğrendim.
Çok yardımcı oldu Allah razı olsun :D
Bütün arkadaşlara kolay gelsin...
var
sen : sevgili;
ben : aşık;
sevgi: aşk;
if ben aşık sana = True then
execute sevgi between(sen,ben);
:)))))
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

naturelmania yazdı: Programın döngüsünün kaç kez döndüğünü ".tag" sayesinde bilebildiğimizi bilmiyordum. Yeni bişi daha öğrendim.
tag ozelligi program dongusunun kac kez dondugu degerini vermez.
tag ozelligi integer tipinde deger alan bir alandir ve ozel bir gorevi yoktur. sadece programcilarin bazi durumlarda yeni bir degisken tanimlamarina ihtiyac birakmadan islerini halletmeleri icin vcl e eklenmis ek bir alandir.

dikkat edersen Matrix1536 'nin vermis oldugu ornekte de gerekli olan degerleri saklamak icin yeni bir integer tipinde degisken tanimlamak yerine bilesenlerin tag ozelligi kullanilmis.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

Saettin bey muğlada hayat nasıl?
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Cevapla