Bu programın işleyişini kim açıklayabilir?

Başlatan bunalmis, 15 Nisan 2010, 23:49:32

z

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?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

birumher

Ç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...
Birkan.Herguner

orhanc

döngü içinde bi procedure işleniyor ve geri dönüyor. çalışması normal
i'm doing nothing... Giddy Up  http://www.drorhan.com

z

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?

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

t2

#4
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.

z

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.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com