Jump to content

Recommended Posts

Posted

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.

Posted

Cevap için teşekkür ederim.

Bahsettiğiniz gibi kodu çalıştıramadım.

Demolarda mesajlar için örnekler var ve onlara hep {$ifdef COMPILER_12_UP} gibi değerler eklenmiş, çok anlayamadım.  :blink:

Posted

Merhabalar;

 

Bunu deneyin:

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

 

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!

Posted

İ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.

Posted
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.

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