Picproje Elektronik Sitesi

PROGRAMLAMA DİLLERİ => Delphi => Konuyu başlatan: z - 15 Nisan 2010, 23:49:32

Başlık: Bu programın işleyişini kim açıklayabilir?
Gönderen: z - 15 Nisan 2010, 23:49:32
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?



Başlık: Ynt: Bu programın işleyişini kim açıklayabilir?
Gönderen: birumher - 16 Nisan 2010, 12:43:15
Ç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...
Başlık: Ynt: Bu programın işleyişini kim açıklayabilir?
Gönderen: orhanc - 16 Nisan 2010, 14:05:43
döngü içinde bi procedure işleniyor ve geri dönüyor. çalışması normal
Başlık: Ynt: Bu programın işleyişini kim açıklayabilir?
Gönderen: z - 16 Nisan 2010, 14:09:47
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?

Başlık: Ynt: Bu programın işleyişini kim açıklayabilir?
Gönderen: t2 - 16 Nisan 2010, 14:22:10
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.
Başlık: Ynt: Bu programın işleyişini kim açıklayabilir?
Gönderen: z - 16 Nisan 2010, 14:43:19
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.