Döngüden bir butona basarak nasıl çıkabilirim..?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Döngüden bir butona basarak nasıl çıkabilirim..?

Mesaj gönderen uğur alkan »

Kod: Tümünü seç

procedure TForm2.FormActivate(Sender: TObject);
var
  Dosya: TextFile;
  DosyaAdi, Satir: string;
begin
 DosyaAdi := 'c:\netlog.txt';
  AssignFile(Dosya, DosyaAdi);
  {$I-}
  Reset(Dosya);
  if IOResult = 0 then 
  while not EOF(Dosya) do
  begin
     ReadLn(Dosya, Satir); // bir satır oku.
        form2.Edit1.Text:=Satir;
        form2.Edit1.Refresh;
        sleep (500);
  end
  else
     ShowMessage('Dosya açma hatası!');
  CloseFile(Dosya);
  {$I+}
end;
bu döngüden aynı form üzerinde bir butona basarak çıkmak mümkünmü?
bu döngü pc kilitliyor...
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
oguzozturk74
Kıdemli Üye
Mesajlar: 574
Kayıt: 01 Şub 2004 12:29
Konum: Erdemli - MERSİN

Mesaj gönderen oguzozturk74 »

Döngüden her hangi bir şart belirterek EXIT komutu ile çıkabilirsin
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Thread :ara yapabilrsin Forumda gerekli açıklamalar var.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Şöyle de olabilir.

Kod: Tümünü seç

var
  FExit: Boolean;

while .... and (not FExit)
begin
   Application.ProcessMessages;
end;

procedure Button1Click(sender....
begin
   FExit:= True;
end;
Butona bastığında FExit true olur. Döngü de eğer FExit true ise kırılır ve çıkar.
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

Bu arada o sleep(500) ü kaldır. Refresh etsin diye koymuşsun ancak processmessages komutu bu işi yapar.
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
  Dosya: TextFile;
  FExit: Boolean;
  DosyaAdi, Satir: string;
begin
 DosyaAdi := 'c:\netlog.txt';
  AssignFile(Dosya, DosyaAdi);
  {$I-}
  Reset(Dosya);
  if IOResult = 0 then
  while not EOF(Dosya) and (not FExit=true ) do
  begin
  Application.ProcessMessages;
     ReadLn(Dosya, Satir); // bir satır oku.
        form1.Edit1.Text:=Satir;
        form1.Edit1.Refresh;
        sleep(200);
        end;
 end;

procedure TForm1.Button2Click(Sender: TObject);
var
  FExit: Boolean;
begin
   FExit:= True;
end;

end.
sonuç olumsuz...

döngü bitmeden çıkmıyor...
Thread olayını biraz araştırıp deneyeceğim...
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

viewtopic.php?t=1693&highlight=thread
de bulunan codu formun neresine yazacagım....? :oops:
bu thread olayı ile ilgili olarak baya bir şey ögrendim. ancak nasıl yapılacagı ile ilgili hiç bir şey bulamadım doğru dürüst, konuya hakim üstatlar konuyu biraz daha açabilirlermi... çünkü çok sık kullanılan bir işlem bu...


ek bilgi olarak bulduklarımdan bir tanesi;

http://www.bilgiteknoloji.net/marjinal/ ... uclari.asp

kısa bir kod örnek olarak oradada verilmiş...
ilgilerinize çok teşekkür ederim.
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
fduman
Moderator
Mesajlar: 2749
Kayıt: 17 Ara 2004 12:02
Konum: Ankara

Mesaj gönderen fduman »

FExit'i procedure içinde tanımlamışsın. Global olmalı ki farklı proc. lardan değer alabilsin.

Kod: Tümünü seç

var
  FExit: Boolean;

procedure ......
  while not EOF(Dosya) or (not FExit) do
  begin
     ReadLn(Dosya, Satir); // bir satır oku.
        form1.Edit1.Text:=Satir;
        form1.Edit1.Refresh;
       Application.ProcessMessages;
   end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   FExit:= True;
end;

end.
şeklinde düzelttim.

En iyi yöntem thread. Ancak belli konularda tecrübe ister.
Kullanıcı avatarı
uğur alkan
Üye
Mesajlar: 227
Kayıt: 29 Ağu 2004 04:49
Konum: Istanbul

Mesaj gönderen uğur alkan »

çok teşekkür ederim kod tamam...
biraz hazır cevap oldu ama kusura bakmayın.... :oops:
benden sonrakiler kolaylıkla bulur artık

Kod: Tümünü seç

Application.ProcessMessages; 
:wink:
Bazen sert rüzgarlar eser başını öne eğmekten asla korkma
Cevapla