2016-03-29 66 views
-2

Firmonkey Multi aygıt projesinde başka bir formun üzerinde göstermek istediğim bir pop-up yükleme ekranı oluşturdum. Şimdi, arka plan formunda yaptığım şeylerle yük ekranının güncellenmemesi sorunuyla karşılaştım. Bunu Nasıl Çözebilirim? Aşağıdaki koddaFiremonkey arka planda bir şeyler yap Form Delphi 10 Seattle

bir i denedim ne örnektir: Ben bazı çoklu iş parçacığı yapmak zorunda tahmin

procedure TForm1.Button1Click(Sender: TObject); 
var 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen.Create(nil); 
    loadScreen.ShowModal(
    procedure(ModalResult: TModalResult) 
    var 
     i:Integer; 
    begin 
     for i := 0 to 200 do 
     begin 
     loadScreen.CurrentItem := i; 
     loadScreen.TextMessage := 'Item:' + loadScreen.CurrentItem.ToString; 
     Sleep(100); 
     end; 
     ModalResult := mrCancel; 
    end); 
end; 

, ama herhangi bir deneyim bunu yok! Bunu yük ekranım için nasıl yapmalıyım?

Ayrıca aşağıdaki denedim ama form gösterilen almaz:

ilk kod bloğunda
procedure TForm1.Button1Click(Sender: TObject); 
var 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen.Create(nil); 
    loadScreen.OnShow := FormShowLoadScreen; 
    loadScreen.Show; 
end; 

procedure TForm1.FormShowLoadScreen(Sender: TObject); 
var 
    i:Integer; 
    loadScreen:TfrmLoadScreen; 
begin 
    loadScreen := TfrmLoadScreen(Sender); 
    for i := 0 to 200 do 
    begin 
    loadScreen.CurrentItem := i; 
    Sleep(100); 
    end; 
    loadScreen.Close; 
end; 
+0

Bkz Marco Cantu blog yazısı kalıcı bir form kapatmak için sıfır olmayan bir değere onun ModalResult özelliğini ayarlayın. – RBA

+0

@RBA evet, bu doğru. Ama yine de bu benim problemimi çözmüyor. Yükleyici formum güncellenmiyor! – Remi

+0

Geri arama yöntemi, ** formu kapatıldıktan sonra ** olarak adlandırılır. Kapalı formda yaptığınız her şey, –

cevap

1

, annonymous yöntem yalnızca loadscreen.modalresult dışında bir ayarlandıktan sonra denir 0. Bu asla olmaz (görebildiğimiz kadarıyla)

İkinci bloğunuzda, 2 farklı loadscreen örneğiniz var. Onlar aynı değiller. FormShowLoadScreen işleyicisi ilk olarak loadscreen.show'dan sonra çağrılır, ancak kendi ekranlarıyla birlikte 2. bir yük ekranı oluşturur. Aslında, bu çok hızlı olabilir, bunun olacağını görmezsiniz.

Gerçekten Delphi çoklu iş parçacığı hakkında daha fazla bilgi edinmeniz gerekiyor. Bir "ilerleme" formunu görüntülemek için, işleme ekranının gösterilmesinden hemen sonra başlatılan ayrı bir iş parçacığının senkronizasyon olayının içine işlenmesini (görüntü güncellemeleri) koymanız gerekir.

Aslında ... FMX'te, anonim bir iş parçacığı başlatmadan önce bir animasyon göstergesini göstermesi ve sonra da iş parçacığı sonlandırma bloğunda tekrar gizlemesi çok daha kolay.

burada Background Operations on Delphi Android, with Threads and Timers

+0

Gerçekten bir cevap olmasa bile bir cevap olarak bunu işaretlediğiniz için teşekkürler, sadece bir cevaptı. – nolaspeaker