Form üzerinde 2 butonumuz var.
Butonların click procedure leri aynen aşağıdaki gibi.
procedure Tform1.Button2.Click(sender : TObject);
begin
// Ivır zıvır satırlar mesela alttaki gibi
form1.refresh;
end;
procedure Tform1.Button1.Click(sender : TObject);
var i:integer;
begin
for i:= 0 to 100000 do form1.Button2.Click;
end;
Programı çalıştırıyor ve Buton1 i tıklıyoruz.
Button1.click procedurü daha döngüde iken Buton2click procedurü çalışmaya başlıyor.
Halbuki bunun olması için for döngüsü içine application.processmessages gibi bir kod eklemem gerekirdi.
Neden buton2click procedurü çalışır?
Çalışması normal. Döngünün bitmesini neden beklesin ki? Zaten döngünün içinde çalışıyor...
Ama Button2click içerisinde görsel bir işlem varsa update veya processmessages olmadan onu yapmaz program...
döngü içinde bi procedure işleniyor ve geri dönüyor. çalışması normal
Bana ters gorunen olay
Eger
for i:= 0 to 100000 do form1.Button2.Click; yerine
for i:= 0 to 100000 do form1.Button2Click(nil);
yazsaydim buton2click rutinine gidip gelmesi normaldi.
Buton1click procduru Button2.click event uretebilir ancak bunun isleme alinmasi icin Buton1 rutinininden tamamen cikilmasi gerekmezmi?
Button2Click veya Buton1click senin belirlediğin şeylerdir. İsminde buton geçse de butonla tek alakası buton basıldığında bu olay çalışsın diye ayar yapılmış olması. Buton basıldığında çalışmak üzere istersen başka bir olayı atarsın. O çalışır.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure leblebi(Sender: TObject);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.leblebi;
begin
MessageDlg('sdhagsdhasdf', mtError, [mbOK], 0);
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
button1.OnClick := leblebi;
end;
end.
Prosedür içinden tamamen çıkmadan başka bir prosedür çağırılabilir. Sizce neden tamemen çıkılması gerekiyor ?
Döngü içinde çalışmaması veya durması gibi durum da olabilir. Ama bu durum yukarıda arkadaşın bildirdiği gibi görsel işlemler varsa olur. ozaman applicatin procesmesahges gerekir.
Butonclick gibi bir procedure basladiginda eger procedure icinde zaman alan islemler varsa ve daha cikamadiysak, bu esnada mouse ile form uzerindeki nesneler tiklanirsa tiklamalar ancak Butonclick procedurunden cikilinca isleme aliniyor.
Bu nedenle form1.Button2.Click isleminin de boyle olmasini bekliyordum.
Eger Form1.Button2.click islemi ile Button2click() ile tamamen ayniysa ok.