1 Son düzenleyen, ugur.sari (11.09.2008 23:03:33)

Konu: Progress Bar Kullanımı

Herkese merhaba,
FoxPro'da progress bar kullanımı ile ilgili bir sıkıntım var.
Basit bir dosya kopyalama işinde progress bar kullanmak istiyorum. Fakar copy file komutu direkt olarak kopyalama işlemini yapıyor. Bu esnada progress bar nasıl güncellenerek çalıştırılıyor. Bu konuda yardım bekliyorum.
Şimdiden teşekkürler.

2

Re: Progress Bar Kullanımı

Kopyeleme islemi en altta windows'un CopyFile APIsi kullanilarak yapiliyor ve onun herhangi bir geri beslemesi yok, yani blok hareket.

VFP'de STA (Single Threaded Apartment) modeliyle calisiyor, yani araya progress bar koymak demek bir isin bolunup onun oyle guncellenmesi demek. Yine de yapmak istersen yollari var:
1) Copy file ... gibi komutlar yerine fcreate(), fopen(), fread(), fwrite() kullan. O zaman nerede oldugunu filan biliyor olacaksin. Kafamdan ornek:

Visual Fox Pro
thisform.pBar.Value = 0

ProgBarliKopye("c:\dizin\dosya1.ext", "c:\dizin2\dosya2.ext", thisform.pBar)
 
Procedure ProgBarliKopye(kaynak, hedef, toPBar)
local hKaynak, hHedef, totBytes
hKaynak = fopen(m.kaynak,10) && kaynagi ac
toPBar.Max = fseek(m.hKaynak, 0, 2) && dosya boyuna bak ve prog barin maxi olarak kur
fseek(m.hKaynak, 0, 0) && basa sar
hHedef = fcreate(m.hedef) && hedefi yarat - hata kontrolu yok dikkat et
 
totBytes = 0
do while !feof(m.hKaynak) && kopyelemeye basla
  totBytes = m.totBytes + Fwrite(m.hHedef, Fread(m.hKaynak,65536), 65536)
  with toPBar
    .Value = min( m.totBytes, .Max )
  endwith
enddo
fclose(m.hKaynak)
fclose(m.hHedef)

2) Microsoft gibi yapabilirsin ve yalandan bir progress bar gosterirsin, kopyeleme zamani boyutuyla ilgisi olmasi gerekmez, sadece arada hareket etsin:) Bunun icin ozellikle Visual studio kuruluysa makinende hazir animated gif var (eski arabali dizi kitdeki gibi progress bar var)

3) SHFileOperation kullanabilirsin (windows explorer'in kopyeleme sirasinda kullandigi ve gosterdigi). Kullanimi cok basit degil ve bence sorunlu, ben kullanmiyorum.

4) Benim FileIO classini kullanabilirsin. Parametresi var, .t. gonderirsen progress bar gosteriyor. Sanirim dosyalar bolumundeydi.

5) Kopyeleme hizli bir islem, birsey kullanmazsin.

...

3

Re: Progress Bar Kullanımı

Küçük bir dosya kopyalıyorsan Çetin'in dediği gibi hızlı bir işlemde ihtiyacın olmaz. Ama eğer büyük bir dosyaysa da fcreate,fopen komutları tehlikeli. Çünkü 2 GB dan fazlasını desteklemiyor.

Haksızlıklar karşısında susanlar, dilsiz şeytanlardır!
www.metinemre.com

4

Re: Progress Bar Kullanımı

Benim kopyalamak istediğim dosyalar SQL backup dosyaları, yani zaman zaman gb mertebesindeki dosyalar. Bu nedenle progress barı kullanamayacağım gibi görünüyor. Gif kullanmak daha pratik bir çözüm.
Yardımlarınız ve görüşleriniz için teşekkürler.