1

Konu: exe programı yapmak

smile:):)Öncelikle selamlar ben konuya merak sarmış genç bir arkadaşım. Daha ilk kez programlamaya fox ile iki hafta önce başladım. Help menüsünü okuyarak kendimi geliştirdim. Çeşitli proramlar yazdım.
Ama bir kaç sorunum var:

1) yilanoyun adlı bir .prg dosayam ve yilan adlı bir formum var. foxpro açıkken gayet güzel çalışıyor.
ama gelgeleim ben bunu bir .exe dosayasına çevriyorum ve foxproyu kapatıp çalıştırınca arakada yine bir foxpro penceresi açılıyor. açılmasa olmaz mı?

2)yilanoyunu.prg yazarken zaman geçirmek için sürekli sayı saymayaya verdim makineyi bu işe yaradı ama programı çok kasıyor ve kapanana kadar programı kitliyor. bir de wait komutu var ama
bu kod ekranda yazılar çıkarıyor ve beni deli ediyor.

3) yine foxpro penceresinde çalışan bir program exe ye çevirdiğimde tabloları tanımıyor. yardımcı olursanız sevinirim.

2

Re: exe programı yapmak

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.

3 Son düzenleyen, ugurlu2001 (31.07.2008 15:36:31)

Re: exe programı yapmak

Sncpkrtl , bende aramıza hoşgeldin diyorum. Vfp için bulabileceğin en kapsamlı ve içerik yönünden en zengin Türkçe kaynaklı yerdesin. Yada özetle en doğru adrestesin smile

Üstad yine incilerinden bir demet sunmuşsun, sen böyle uzun uzun yazdıkça istifade etmemek mümkün değil.

Bende yazdıklarınla ilgili bir kaç soru sorabilirmiyim? VFP içindeki TIMER class örneğini _Screen yada _VFP içinden de kullanabilirmiyiz?

Son bir soru daha? VFP screen içerisinde 7 - 8 tane kadar form (yada N tane) tanımladık. Formların birtanesi hariç hepsinde TIMER kontrolü kullandık. Diğer N-1 tane formda kullanılan Timer,  Timer kullanmadığımız formun performansını olumsuz etkiler mi?

Uğur
-------------------------------------------------------------------------------------------------------------
Hayat bir bisiklete binmek gibidir. Pedalı çevirmeye devam ettiğiniz sürece düşmezsiniz. Claude Peppeer
Kusuru söylenmeyen adam, ayıbını hüner sanır.  Türk Atasözü

4

Re: exe programı yapmak

_screen ya da _vfp olur ama gerek bile yok.

Visual Fox Pro
oTimer = createobject("myTimer")

 
* do form ....
 
read events
 
define class myTimer as Timer
Interval=5000
Procedure Timer
this.interval = int(rand()*10000)
?? chr(7)
endproc
enddefine

gibi muzip sinir bozucu timer olabilir. Yeterki bir sekilde oTimer degiskeni ucmasin:)

Timer kodu calistigi anda VFP baska is yapmaz (STA modeliyle calisiyor ve zaten yapsaydi kontrol edilmesi cok imkansiz hale gelebilirdi). O timer kodlari zaman alici ise tabii ki performans etkilenecek. Etkilenmeyi onlemenin bir yolu ShellExecute ile bagimsiz formlar acmak (bagimsiz exeler daha dogrusu).

5

Re: exe programı yapmak

Abi şimdi bir kart oyunu yaptım pis yedili diye belki bilirsin. datakart diye bir tablom var. ilk açılışta datakart karta bilgi ekliyor. kart is oyunculara (yani kart1,kart2,kart3,kart4 tablolarına) kartları dağıtır.
birde ortakart vardır. oyun tam teşekkürlü olmasa da şimdilik dağıtım işlemini fox pencerisinde commanda do... olarak çalıştırdığımda çalışıyor ama exe ye çevirip foxtan çıkıp programı çalıştırdığımda tabloları bulamıyor. hangi dosyalar var derseniz sadece tablolarım,bir formum ve bir command dosyam var. bir database mi yaratmam gerekiyor.

ayrıca database kavramını anlamadım , bir de query var yardımcı olursan sevinirim.

6

Re: exe programı yapmak

Programin girisinde:

set path to "c:\DizinAdi"

seklinde data dosyalarin neredeyse orasini goster.


Database, tablolar icin bir "container". Ekstra ozeliklerini tutuyor. Onlara ihtiyacin yoksa kullanmayabilirsin.

7

Re: exe programı yapmak

Çetin Abi çok sağol . Ama bir konuda daha danışacağım. Ben kaynak olarak daha yeni burayı kullanmayı başladım. Bir de foxpro helpine baktım ama ingilizce çok yoruyor. commandların ve fonksiyonların türkçe açıklamasının bulunduğu bir kaynak var mı? çünkü tahmin edersiniz belki yeni olduğum için sürekli deneme yanılmayla iş yapıyorum. Ne kadar çok kaynağım olursa o kadar iyi..

8

Re: exe programı yapmak

türkçe kaynak yok. ukalalık yapmak istemem ama iyi bir programcı ingilizce okuyup yazabilmelidir...

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