Progresspar1 position 100% olunca form1 gizleniyor ve form2 show oluyor, buraya kadar sorun yok fakat görselde progressbar tam anlamıyla tamamlanmadığı için göze hoş gelmiyor bu durumu nasıl çözebilirim...
İlginç bir şekilde Timer ın içinden çıkmadıkça progressbar tam dolmuyor, onun için bir timer daha koyup timer1.enabled=false olduğunda form1 igizle form2 yi aç diyebiliriz.Program bu şekilde istenildiği gibi çalışıyor ama daha iyi bir çözüm vardır diye düşünüyorum.
procedure TForm1.Timer1Timer(Sender: TObject);
begin
ProgressBar1.Position := ProgressBar1.Position + 1;
form1.Caption:=inttostr(ProgressBar1.Position) ;
if ProgressBar1.Position = ProgressBar1.Max then
Timer1.Enabled := False;
end;
procedure TForm1.Timer2Timer(Sender: TObject);
begin
if Timer1.Enabled=false then
begin
form1.Hide;
form2.Show;
timer2.Enabled:=false;
end;
end;
En son Hashirama tarafından 12 Şub 2015 11:46 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Timer2Timer hala thread içerisinde, o yüzden koşulun sağlandıysa timer ı durdur ve başka bir procedure tetikleterek show vs işlemlerini yaptır. Ayrıca ProgressBar1.Repaint yada .invalidate boyama işlemini tekrar yaptırtacaktır.
if ProgressBar1.Position = 100 then begin cik_disari; gibi
ZAGOR TENAY TÜRK'tür... TÜRK kalacak... Zoru başarırım, İmkansız zaman alır FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
Sorunu tam anlamak için Delphi7'de kendim denedim. Herhangi bir tazeleme sorunu olmadan gayet güzel bir şekilde tam zamanında ekranda gösterdi. Hatta sizde neden bu şekilde olduğuna anlam vermedim ve Delphi'yi kapattım. Sonra bu sorunun XPMainfest ile alakalı olacağı aklıma geldi ve üşenmeden tekrar kod yazdım ve sizin bahsettiğiniz sorun gerçekleşti. Normalde Delphi7'de formunuza progressbar koyduğunuzda eski stil kesikli bar şeklinde geliyor. Bunun smooth özelliğini true yaptığınızda da düz mavi şerit haline geliyor. Fakat projenizde XPManifest'i etkinleştirince artık smooth özeliğine bakmaksızın sizin resimde gösterdiğiniz gibi daha güzel bir görsellikte geliyor.
Şimdi bu sorunu update ile veya application.processmessage ile çözemezsiniz. Çünkü, siz progressbar.posistion'ı artırdığınızda XPManifest temasından dolayı nesne pozisyonunu yaklaşık 300-500ms sonra olması gereken konuma getiriyor. Delphi XE7'de de denedim sonuç aynı. Zaten standart olarak manifest etkin olduğu için eski stil progressbar zaten kullanılamıyor.
Çözüm şu şekilde mümkün oluyor. Sizin projenize ek yapıyorum.