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