Oncelikle hosgeldin:)
(Nolur yanlis anlama bu paragrafi)
VFP'ye baslayali 2 hafta oldu ve cesitli programlar yazdin? Bu cok iyi haber cunku VFP ile ilgili soranlara oyle hemen pat diye ogrenilecek kadar da basit degil diyordum, demek ki yanilmisim. Yeni baslayan penceresinden bakamiyorum uzun yillardir. Seni ornek gosteririm artik 2 haftada basit de olsa birseyler yapti diye:)
1) Arkada acilan foxpro penceresi VFP'nin ana penceresi. VFP MDI (MultipleDocumentInterface) - cok dokumanli arayuz daha Turkcesi coklu pencere- ozellikli. Bu aslinda diger dillere gore + bir ozellik. Diger dillerin cogunda bu is SDI - (SingleDocumentInterface) -tek pencere- olarak yapiliyor ve MDI saglamak daha zor. VFP sana aslinda kiyak yapiyor yani:) Bastan MDI. Ama tabii sana SDI kullanma sansini cok basit bir sekilde veriyor:
Formunun "ShowWindow" propertysini 2 (TopLevelForm) yap.
Modi comm config.fpw
diyerek bir dosya yarat. Icine:
screen=off
koy. O zaman bu da o ana pencerenin hic goruntulenmemesini saglar (yalniz dikkat et formun calismasi icin WindowType = 1 (modal) yaptiysan, o ShowWindow = 2 iken calismayan bir ozellik. Kodunda "read events" yok ise, exe'de programin calisir ve aninda kapanir (aslinda biter, bittigi icin de kapanir). Read events ve karsiligi Clear events yok ise onlari ekle, ne olduklarini bilmiyorsan sor tekrar anlatalim ama ekle:)
2) Surekli sayarak hayat gecmez, bilgisayari bile bayar surekli saymak:) Zaman gecirmenin N tane yolu var ve duruma gore bir ya da digeri uygun oluyor. VFP'da mesela bekleme saglayan:
inkey(),chrsaw(), wait window, messagebox() ... var
Amaclari farkli. Pratikte:
=inkey(1)
gibi kullaniliyor (en son kullanali kac yil gecti hatirlamiyoum). 1 snlik beklem yaptiriyor (eger daha once tusa basilmadiysa)
chrsaw(1)
benzer sekilde 1 sn boyunca kkeyboard bufferda birsey var mi diye bakiyor. wait window, messagebox kullaniciya bir sey sorup karsiliginda cevap almak icin ve timeout'lari var.
Visual Fox Pro
for ix=1 to 10000000
endfor
bir baskasi. Ne kadar bekleyecegi calistigi makineye bagli olan bir bekleme.
Visual Fox Pro
start = datetime()
do while datetime()-m.start < 5
enddo
Yine bir baskasi ve 5 sn bekletiyor. Bu son iki yontem de surekli "is yaptigindan" sistem kaynaklarini zorlar, kum saati cikarir, kilitlenme gibi gorunur (ki kilitlenmenin tipik sekli programlardan birinde sonsuz donguye girilmesi).
Diger bir yontem sistem kaynaklarini zorlamadan belli araliklarla bir seyi kontrol etmek yapmak. Bir tanesi "Timer" class ile. Interval'ini milisaniye cinsinden kurarsin, Timer eventinde de istedigini yaptirirsin. Asagida cok basit bir ornek:
Visual Fox Pro
Local oForm
oForm = Createobject('Ornek')
oForm.Show
Read Events
Define Class Ornek As Form
Add Object zamanlayici As Timer With Interval = 1000
Add Object txtZaman As TextBox With ;
left = 10, Top = 10, ;
enabled =.F., DisabledForeColor = 0xFF0000,Width=300,Value=Datetime()
Procedure zamanlayici.Timer
Thisform.txtZaman.Value=Datetime()
Endproc
Procedure QueryUnload
Clear Events
Endproc
Enddefine
Bir baska yontem de windows API kullanarak belli bir sure hic bir is yapmadan 'uykuya yatmak', timer gibi ve sistem kaynaklarini zorlamaz:
* deklarasyon bir kere yapiliyor - nerede istersen yapabilirsin
* clear dll ile temizlenmedikce kullanabilirsin. Temizlediysen bir yerde
* kullanmadan once gene deklare et
Visual Fox Pro
declare Sleep in win32API integer dwMilliseconds
* Istedigin yerde kullanima hazir
* 30 sn uyuyarak bekle - dikkat et sure timer gibi bunda da milisaniye
Sleep(30000)
Bir baska ornek:
* 60 saniye dolana kadar bekliyoruz ve arada her 5 saniyede bir bir seye bakiyoruz
* ama bu sefer sistem kaynaklari zorlanmiyor - 5sn de bir yaptigimiz kontrol islemi disinda
Visual Fox Pro
start = datetime()
do while datetime() - m.start < 60 && en fazla 60 sn
Sleep(5000) && 5 sn uyu - bu tam olu gibi yatma islemi. CPU hic kullanilmiyor VFP tarafindan
if file("c:\dummy.txt") && laf olsun diye yaptigimiz kontrol
exit && dosya varsa kes ve cik
endif
enddo
Bu son ornegi gercek hayatta kullan diye vermedim bu arada (dosya varmi diye bakip cikma kismini). O tip islerde daha iyisi var - durup beklemektense systemden event yakalamak gibi:)
3) Iste en zor soru:) Cunku anlamadim ve onu nasil yapmayi basardin? Biraz detay versen. tanimiyor derken, bulamiyor mu, yazmana mi izin vermiyor? Hata mesaji nedir ya da ne yapmaya kalktiginda ne oluyor.