Jump to content

Sleep Komutu üstteki diğer kodlardan önce çalışıyor.


pro_imaj

Recommended Posts

Merhaba;

Bir formda 2 adet Container var. Bunlardan bazı şartlarda birini üste diğerini alta getirmek istiyorum. Bu işlemide yaparken Loading Container'i göstermek istiyorum. 

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
    Loading_Container.Visible:= True;
    Genel_Container.Visible := False;

    ShowMessage('a');
    Sleep(6000);
end;

Yukarıdaki kod bloğunda önce "6000" kadar bekliyor ve sonra diğer işlemler yapıyor. Önce üstteki kodların çalışması sonrada 6000 kadar durmasını istiyorum normal olarak.

Bu sorunu nasıl çözebilirim.

Teşekkürler.

Link to comment
Share on other sites

 

Merhabalar;

 

Bunu deneyin:

ShowMessage('Mesaj metni', procedure(Sender: TComponent; Res: Integer)
  begin
    Sleep(6000);
    //Sleepten sonra çalışacak olan kodlar buraya gelecek.
  end);

 

Neden mesaj verdirdiğimizi anlayamıyorum. Ekrana mesaj verdirmek istemiyorum ki!

Link to comment
Share on other sites

İlk yönten olarak Sleep yerine timer kullanabilirsiniz. Timer'ın RunOnce property'sini true yapın. enable'ı false yapın. Timer intervalini de 6000 ms olarak değiştirin.

Button'un onClick eventinde çalıştırmak istediğiniz ilk kodu yazın ve Timer'ın enable değerini true yapın.

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
  UniContainerPanel1.Visible:= false;
  UniContainerPanel2.Visible:= true;
  UniTimer1.Enabled := true;
end;

OnTimer eventinde de Timer'ın bitiminde çalışacak kodu yazın.

procedure TMainForm.UniTimer1Timer(Sender: TObject);
begin
  UniContainerPanel1.Visible:= false;
  UniContainerPanel2.Visible:= true;
end;  

Bir diğer seçenek ise AjaxRequest ve AjaxCallBack'i kullanmak olabilir.

Button'un UniEvent'ini açın ve ajaxRequest kısmına aşağıdaki kodu yazın.

function ajaxRequest(sender, url, data)
{
  MainForm.UniContainerPanel1.setVisible( false );
  MainForm.UniContainerPanel2.setVisible( true );
}

ajaxCallback kısmına da aşağıdaki kodu yazın

function ajaxCallback(sender, response)
{
  MainForm.UniContainerPanel1.setVisible( true );
  MainForm.UniContainerPanel2.setVisible( false );
}

button onClick eventine sleep(6000); kodunu ekleyip sonrasinda atıyorum showmessage(); fonksiyonuyla ekranda mesaj çıkarmak isterseniz. Sırasıyla önce request çalışacak sonra 6000 ms bekleyecek, daha sonra da ajaxcallback ile birlikte showmessage çalışacaktır.

procedure TMainForm.UniButton1Click(Sender: TObject);
begin
 Sleep(6000);
 ShowMessage('6000 ms bekledikten sonra buraya geldi');
end;

Not: UniGui'de delphi tarafında yazılan kodlar server'a gönderilir ve server'da işlendikten sonra server'dan toplu bir cevap gelir. Yazdığınız kodda server container visible'larının değişmesi isteğinin cevabı sleep kodunun cevabıyla birlikte döndüğünden sistem kodları aynı anda değerlendirip sleep işleminin bitmesini bekliyor.

Link to comment
Share on other sites

Not: UniGui'de delphi tarafında yazılan kodlar server'a gönderilir ve server'da işlendikten sonra server'dan toplu bir cevap gelir. Yazdığınız kodda server container visible'larının değişmesi isteğinin cevabı sleep kodunun cevabıyla birlikte döndüğünden sistem kodları aynı anda değerlendirip sleep işleminin bitmesini bekliyor.

 

Yazdığınız not kısmı balık tutmayı öğretti çok teşekkür ederim.

İyi çalışmalar.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...