Uzunca bir aradan sonra tekrar merhaba:) Bunu bir mesaja cevap olarak yazdim. Forumdaki diger arkadaslara da faydasi dokunabilecegi icin oldugu gibi ekliyorum:
Sadece iki tabloluk bir uygulama. Birisinde kisilerin adi, soyadi gibi bilgileri tutuluyor. Digerine de bunlar sanki dukkana gelen musterlermis gibi sadece gelis tarihleri ve toplamHarcamaTutari olsun. Basit olsun diye bu kadarcik bilgi, iliskili tablo olsun diye cift tablo (muhasebede MusteriHesabi,CariHareket gibi).
Nereden baslayacagin biraz sana ve aliskanliklarina kalmis birsey, kesin kurallari yok.
-Once datayi yaratip bununla ilgili form, rapor vs yi sonradan olusuturabilirsin.
-Dogrudan form ile baslar (yani arayuzden) arayuzun ihtiyaclarina gore datani sekillendirirsin.
Tabii ideal olarak ta hepsinden once ya kagit kalemle ya da visio vb araclarla tum program akisini, formlarini filan dizayn edersin:)
Ben genelde biraz ustunde kagit kalemle dusunup, sonra bodoslama bir yerden girerim, zamanla nasil oluyorsa sekillenir:) Benim gibi yapma, ben daginik sayilirim o acidan, yillarin verdigi guvenden kaynaklaniyor herhalde bir sekilde toparlanip oluyor.
Uygulamalarin hepsinde:
1) Tum uygulamalarinda surekli kullandigin
2) O uygulamaya ozel
Form,Class ... oluyor.
Tum uygulamalarinda kullandiklarini iyi belirlemen gerekiyor. Cunku orada yapacagin her degisiklik, o andan itibaren yeniden derlenen tum uygulamalarini etkiler. Mesela kendisine iki dizinadi gonderildiginde, ilk dizinden dosyalari ikincisine kopyeleyen bir kod tum uygulamalar icin ortak bir kod. Bunun benzeri bir dizi folder/dosya islemi yapan kodlari "FileOperations" adli bir classta toplayip, onu da "ortak" bolumde saklarsan tum ygulamalarin ondan faydalanir. Uzerinde yapacagin her degisiklik, genelde yeni cikan isletim sistemleri nedeniyle guncelleme, daha hizli calisan kod, hata duzeltme vs'dir ve tum uygulamalarin yeniden derlense de iyi yonde etkilenecegi icin sorun da olmaz. Uzun lafin kisasi, jenerik olanlar orada. Bunu yapmamizin nedeni, oradaki kodlarda bir degisiklik oldugunda N tane kopyesini dusunmen, onalri bulup orada da duzeltme yapman gerekmemesi.
Tamam simdi artik ilk yapmamiz gerekeni yapalim artik:)
Explorer kullanarak yapabilirsin ancak VFP icinden daha kolay:)
-VFP'yi baslat
-Command windowda
Visual Fox Pro
MD ("c:\VFPCommon") [enter]
Modify Command ("c:\vfpCommon\CreateProjectFolders") [enter]
-Acilan kod penceresine asagidaki kodu yapistir:
Visual Fox Pro
****************************************************
* CreateProjectFolders.prg
* Proje folderlarini olusturan kod
* Parametre:
* tcBasePath: String. Folderlarin olusturulacagi ana dizin adi.
* Remarks:
* Gelen parametrenin string olup olmadigi, dizinin varligi
* gibi kontroller yok.
* Kullanim ornegi:
* do CreateProjectFolders with "c:\Yeni Dizin"
* "c:\Yeni Dizin" olmak zorunda degil.
* Yoksa yaratiliyor. Varsa sadece alt dizinler yaratiliyor
****************************************************
LPARAMETERS tcBasePath
md (addbs(m.tcBasePath)+"BITMAPS")
md (addbs(m.tcBasePath)+"DATA")
md (addbs(m.tcBasePath)+"FORMS")
md (addbs(m.tcBasePath)+"INCLUDE")
md (addbs(m.tcBasePath)+"LIBS")
md (addbs(m.tcBasePath)+"MENUS")
md (addbs(m.tcBasePath)+"PROGS")
md (addbs(m.tcBasePath)+"REPORTS")
md (addbs(m.tcBasePath)+"TEST")
[Ctrl+W] ile kodu saklayip kapat.
-Menuden Tools\Options\File Locations'a git.
-Search path'i bul ve "Modify". Asagidakini yapistir.
bitmaps;data;forms;include;libs;progs;reports;c:\VFPCommon\bitmaps;c:\VFPCommon\forms;c:\VFPCommon\include;c:\VFPCommon\libs;c:\VFPCommon\progs;c:\VFPCommon\reports;
-OK de, sonra Set as default secip kapat.
Birinci basamak hazirlik tamam. Projelerimiz icin iki adet ana dizinimiz olsun (explorerda filan yaratma)
1) c:\VFPProjects
Burada gercek uygulamalarimiz olacak.
2) c:\VFPTestProjects
Burada test projeleri, proje olmayan deneme kodlari vs. Bir cesit faydali 'copluk':) Herhangi bir anda silinse de fazla uzulmeyecegin yer. Ikisi bir arada olursa zamanla o kadar buyuyor ki ne nerede bulmak cok zor.
(Ileride odev olarak bu dizinlerdeki Projeleri, dosyalari, ne is yaptiklarini vs iceren bir uygulama yapabilirsin - ben hala oturup yapamadim kendim icin senden calarim:)
Simdi ilk test projemizin adinin da "VFP ogreniyorum1" oldugunu varsayalim. Su ana kadar sadece:
c:\VFPCommon dizinini yarattik ve icinde bir adet 'CreateProjectFolders' programimiz var. Explorerdan bakarsan VFP iki adet dosya yaratmis durumda (1 olabilir ayarlara gore cok onemli degil).
c:\VFPCommon\CreateProjectFolders.prg
c:\VFPCommon\CreateProjectFolders.fxp
PRG uzantili olan kaynak kod (source code) dosyasi, notepadde bile acilip duzenlenebilir. Ama ideal editor VFP'de:
modify command ("c:\VFPCommon\CreateProjectFolders") [enter]
ile gelen editor.
FXP uzantili olan ise VFP'nin derledigi ve aslinda programi calistirmak istediginde cagirdigi kod (compiled code, object code). Ona dokunma (duzenlemek icin - bakmak icin notepadde filan acarsan ya saklamadan kapat ya da kazara sakladiysan sil). Istedigin zaman silebilirsin. VFP gerekince yeniden yaratir.
Simdi ilk olarak o koda yazdigimiz alt dizinlerin olusturulmasini istiyoruz. Bunu c:\VFPCommon icin bir kere yapicaz, sonra her yeni proje icin de sadece projeye baslarken bir kere.
Command window'da:
Visual Fox Pro
do ("d:\VFPCommon\CreateProjectFolders") WITH "c:\VFPCommon" [enter]
do ("d:\VFPCommon\CreateProjectFolders") WITH "c:\VFPTestProjects\VFP ogreniyorum1" [enter]
Explorerda gidip bakarsan istedigmiz dizinler olusturuldu.
(
Ipucu:
c:\VFPTestProjects diye bir dizin yokken:
MD ("c:\VFPTestProjects\VFP ogreniyorum1\SubFolder")
komutu hata vermez ve 3 dizini de yaratir. Ilki varsa 2 ve 3'u, 2.de varsa sadece 3.yu yaratir. Ucu de varsa hata mesaji verir. Istersen kodunu saglamlastirmak icin once o dizin var mi diye bakabilir ve hata mesajini almazsin:
Visual Fox Pro
if !Directory("c:\VFPTestProjects\VFP ogreniyorum1\SubFolder")
MD ("c:\VFPTestProjects\VFP ogreniyorum1\SubFolder")
endif
)
Bizim yaptigimiz da o koda ana dizini parametre olarak gondermek. Kod gonderdigimiz dizini (mesela "c:\VFPTestProjects\VFP ogreniyorum1") tcBasePath degiskenine aliyor.
addbs(m.tcBasePath)
Burada addbs() fonksiyonu dizinin sonunda "\" olmasini garantiliyor. Varsa dokunmuyor. Yoksa ekliyor.
addbs(m.tcBasePath)+"bitmaps"
"c:\VFPTestProjects\VFP ogreniyorum1\bitmaps"
seklini aliyor.
md (addbs(m.tcBasePath)+"BITMAPS")'de:
md ("c:\VFPTestProjects\VFP ogreniyorum1\bitmaps")
seklini aliyor.
(
Not ve biraz da pek bilinmeyenleri de icerdiginden ipucu:
VFP'de +,- gibi operatorler birden fazla gorev yuklenmis (Overloaded) operatorler.
"Merhaba" + " Fox4um" dediginde iki string birlestirilip "Merhaba Fox4um" oluyor.
"Merhaba " + "Fox4um" dediginde "Merhaba Fox4um" oluyor.
"Merhaba " - "Fox4um" dediginde ise: "MerhabaFox4um " oluyor.
- ile solundaki string'ten sonundaki bosluklar (trailing spaces) kesilip en sona konuyor.
"Cetin "-(" " + "Basoz") dersen: "Cetin Basoz " oluyor.
- operatorunun kullanimi stringlerde pek bilinmediginden ve aslinda SQL'lerde, View,index vs yaratmada onemi oldugundan araya ekledim:)
+,- artimetik islemlerde bilindigi gibi calisiyor.
Date ve DateTime tipleriyle calismalari farkli:
Date tipi:
Date1 - Date2: Iki tarih arasindaki fark. GUN cinsinden.
DateTime1 - DateTime2: Iki tarih ve saat arasindaki fark. SANIYE cinsinden.
Tarih + 2: Tarihe 2 GUN ekle.
TarihSaat + 2: Tarih ve saate 2 SANIYE ekle.
Tarih - 2: Tarihten 2 GUN cikar.
TarihSaat - 2: Tarih ve saatten 2 SANIYE cikar.
TarihSaat + 86400: Tarih ve saate 1 GUN ekle. (1 Gun=24saat=24*60 dk= 24*60*60 sn = 86400sn)
TarihSaat + 86400*5 +3600*2 + 60*10: Tarih ve saate 5 GUN + 2 saat + 10 dk ekle.
Bunlarin yanisira bir suru string ve date/time fonksiyonlari var. Bunlar temel dogrudan islemler.
)
(Hala sadece folder yarattik nerede ekranlar dedigini duyar gibiyim. Soz daha hizli gidicem ama cok faydali birsey daha yapalim:)
-Command window
Visual Fox Pro
create table (home()+'Projelerim') free (Caption c(50), Path c(250)) [enter]
use [enter]
Modi comm (home()+'Baslat') [enter]
-Asagidaki kodu yapistir, [Ctrl+W] ile sakla
Visual Fox Pro
USE HOME()+'Projelerim'
BROWSE
SET DEFAULT TO (TRIM(Projelerim.path))
_screen.Caption = TRIM(Projelerim.Caption)
USE IN 'Projelerim'
-Command window
_cliptext = home()+'Projelerim.prg'
-Tools\Options\File Locations\Startup Program. Modify.
[Ctrl+V]
OK
Set as default
-Haziriz:) VFP'yi kapat. Yeniden ac.
-Bir browse gelecek. [Ctrl+Y] ile ilk kaydi ekle.
Caption:
VFP ogreniyorum1
Path:
c:\VFPTestProjects\VFP ogreniyorum1
-Browse'i kapat (kosedeki X ile, ya da o satirin uzerinde ESC ile - once tab kayit kesinlessin, ya da [Ctrl+W] ile ki bu en kestirmesi).
Bu basit ama efektif bir baslama koduydu. VFP'nin baslik satirinda simdi 'VFP ogreniyorum1' gouyor olman lazim. Command windowda:
CD [enter]
yaparsan su anki icinde oldugun dizini yazacak.
c:\VFPTestProjects\VFP ogreniyorum1
degilse bir yanlislik yaptin. Dogru oldugunu varsayarsak. Yeni projelerinde butun yapman gereken acilista [Ctrl+Y] ile kayit ekleyip, Caption ve Path'i girmen. Boylece bir dahaki acilista yazmaktan kurtuldugun 2 satir var:) Ama inan bana o 2 satir cok bayiyor zamanla. Hem yazdigimiz o 'baslat.prg' zamanla istersen daha karmasik isleri de icerebilir ve her acilista calisan kucuk bir ortam hazirlama programi.
Kayitli projelerin icin sadece acilista ilgili satira git, esc'e bas. Birden fazla projeyle calisirken, N tane VFP acabilir, ayni sekilde ilgili satira gider ESC'e basarsan, her biri hangi proje oldugunu "baslik"ta gosterecek. Aralarinda dolasmasi kolay oluyor sonra Alt+Tab ile.
Baslamadan son aciklama. VFP'de
satir basinda * o satirin kullaniciya not (comment) oldugunu soyluyor. Oraya kendine ait notlari yaziyorsun.
Satir icinde && kullanirsan ondan sonraki hersey yine not (inline comment).
; (notali virgul - semicolon) kodun alt satirda devam ettigini belirtiyor - gorunmeyen bolume tasmasin diye.
Genelde programlar:
Visual Fox Pro
* Bu kod sunu bunu yapar
use myTable && myTable dosyasini ac
scan && tabloyu taramaya basla
if isim = 'Ahmet' and ;
tarih > {^2007/1/31} && isim Ahmet ve tarih 31 Ocak 2007'den sonra ise
* Burada uyan kayit icin birsey yapilacak
endif
endscan
gibi bunlari kullaniyor (ben o kadar detay aciklama koymam tembellikten ama yapabilrsen bastan alis:)
Komutlar tek kerelik seylerse dogrudan command windowda yazip [enter]. Aninda calisir. Hata yoksa herhangi bir mesaj alman gerekmiyor (komutuna bagli). Hata varsa hic merak etme VFP mutlaka mesaji verir:)
VFP'nin diger bir ozelligi, bir program blogunu ister command window'da, ister bir kod penceresinde olsun secip, right click, 'Execute selection' ile calistirabilmesi. Boylece kodunu daha yazarken yer yer test edebilirsin.
Modify Command [enter]
ile bir kod penceresi acarsan, buraya yazip, secip calistirmanin avantaji yavas yavas orada deneyip istersen saklamak. Command window'da yaziyorsan yeni satira gecmek icin:
[enter] yerine [Ctrl+enter] kullan. Yoksa enter'a bastigin anda o 'satir' komut calisacak. Ornek (command windowda yaziliyor):
Visual Fox Pro
for ix = 1 to 10 [Ctrl+Enter]
? m.ix [Ctrl+Enter]
? "Bu string iki satir"+; [Ctrl+enter]
" olarak yazildi" [Ctrl+enter]
endfor [Ctrl+Enter]
-Blogu sec. Right click, Execute selection.
Ya da daha kisasi (sadece command windowda):
-Blogu sec. [Enter]
Bundan sonra yazarken ozellikle Command window demediysem bu kurallara gore ve saklayip istememene bagli olarak birini kullan. Satir sonuna [enter] yazmiyorum artik. Command windowda ise hemen calisacak (zaten bir kismi da hemen calismasini istedigimiz tek bir defa yapilacak isler). Satirlarda *, && ile ekledigim notlar aciklama icin o kismlari yazmana gerek yok keyfe keder. Bir de command window yazdiklarini sakladigindan orada dogrudan yapip sonra blogu secip istedigin bir kod penceresine kopyeleyip saklama sansin var. VFP kapatsan da o kodlari sakliyor:)
Uyari: Yapacagimiz uygulama islerin nasil yapilmasi gerektigini dogru olarak gostermiyor. Database dizayni bile kotu aslinda. Sayfalardir yazdigima bakma normalde VFP'yi acip bu uygulamayi hazirlayip exe haline getirmesi 5dk filan surer ve yeni install edilmis bir VFP9 ile yapilabilecek bir uygulama. Simdilik sadece suya ayagimizi alistiriyoruz ve kumda oynuyoruz, o gozle bak. Herseyi yaziyla gonderebilmek icinde hepsi kod olarak. Normalde gorsel ortamda cok daha basit olan seyler burada karmasik gibi. Mesela form yazilirken ADD OBJECT satirlari olacak, sonrasinda da bir suru top,left vs. Form dizayncisi ile bu is aslinda toolbardan ilgili olani sec, formda istedigin yere klikle koy seklinde.
Procedure btnEkle.Click
...
endproc
gibi bir kod gordugunde o da:
-Formda btnEkle adli butona cift klik, sol ustte 'btnEkle', sag ustte 'Click' oldugundan emin olup (degilse degistir) o ... ile belirtilen kodu oraya yaz demek. Yaz, yapistir dedigim yerlerde copy&paste yerine hakikaten yazarsan VFP'nin kod editorune alisirsin, hata yapma sansi da var. Hatalarla nasil ilgilenilecegi ise gelecekte insallah:)
(Ben bayildim hala projeye baslayamadik diye, umarim sen hala oradasindir, basliyoruz:)
1) Once datayi hazirlayalim. N tane yolu var. Ben kolayima geleni yapiyorum.
* Uygulama database'ini yarat
create database ("data\BasitData") && data alt dizinimizde BasitData.dbc database dosyasini yarat
* Tablolarin kullanacagi bir kodumuz var - once onu yarat
Modify Procedures
* Acilan kod penceresine yaz, sakla, kapat
Visual Fox Pro
Procedure GetRowKey
Local pGUID,rGUID
Declare Integer UuidCreate In 'RPCRT4.dll' String @pguid
Declare Integer StringFromGUID2 In 'Ole32.dll' ;
string rguid, String @lpsz, Integer cchMax
pGUID=Replicate(Chr(0),16)
rGUID=Replicate(Chr(0),80)
UuidCreate(@pGUID)
StringFromGUID2(pGUID,@rGUID,40)
RETURN Strconv(Left(rGUID,76),6)
endproc
* Tablolari yarat. Iki tablo.
* 1.Tablo kisi bilgileri icin.
Visual Fox Pro
create table ("data\kisi") ;
( kisiID c(38) default GetRowKey(), ;
ad c(15), ;
soyad c(15), ;
dogumTarihi d, ;
telefon c(20), ;
adres m )
* Indexler
Visual Fox Pro
index on upper(ad) tag ad
index on upper(soyad) tag soyad
* Primary key
alter table ("kisi") add primary key kisiID tag kisiID
* 2. tablo. Geldigi tarih, toplam alisveris tutari
Visual Fox Pro
create table ("data\AlisVeris") ;
(alisverisID c(38) default GetRowKey(), ;
kisiID c(38), ;
tarihvesaat t, ;
tutar y)
index on kisiID tag kisiID
* Primary key
alter table ("alisveris") add primary key alisVerisID tag alVerID
* kisiID indexi ile kisi tablosu kisiID primary key'i iliskilendir
alter table ("alisveris") ;
add foreign key tag kisiID ;
references kisi tag kisiID
-Tablolar hazir. Form yapalim. Command window
Create Form ("forms\Kisi")
-Form'da right click. Dataenvironment.
-"Kisi" tablosunu sec, Add, Close.
-Dataenvironmentta kisi tablosu secili iken, Properties penceresinde (adi PEM sheet)
Buffermodeoverride: 5
-KisiID disindaki tum fieldleri sec (click,shift+Click, ctrl+Click kullanarak)
-Secili fieldleri SAG mouse tusuyla formun uzerine surukle birak
-"Create Multiple Controls here" sec.
-Bundan sonra gorsel olarak yerlesimleri, caption propertyleriyle istedigin gibi oyna (ya da simdilik birak oldugu gibi kalsin).
-Dataenvironment'i (DE) kapat.
-Formun caption properysini: "Kisi ekleme,silme vs" yap (duzgun birsey bul iste:)
-Simdi bir dizi is yapan dugme ekleyelim (unutma ideal ile ugrasmiyoruz sadece basit calisan birsey simdilik. Olmasi gereken sekil sonra zamanla gelisir testlerden gerceklere gecerken).
-Toolbardan 4 tane buton ekliyoruz. Bu durumda toolbarda once CommandButton kontrolune klikle, sonra da en sagdaki 'Kilit' ikonuna.
-Formda oncekilerin altinda bu butonlari koyacagin yerde (formu gerekiyorsa buyut once sag-alttan cekerek) klikle (toplam 4 klik).
-Simdi toolbarda 'ok' ikonuna klikle.
-Butonlara sirayla klikleyerek 'Caption' lara sirayla:
Ekle,Sil,Sakla,Geri Al
yaz.
Name propertylerini de sirayla:
btnEkle, btnSil, btnSakla, btnGeriAl
yap.
-Toolbardan hemen CommandButton yanindaki 'Command Group'a klikle, formda onceki butonlarin altinda bir yere klikleyerek forma ekle.
-Yeni ekledigin 'Command Group'a sag klik, Builder.
-Number of buttons:4
-Altindaki gridde captionlari:
Ilk,Onceki,Sonraki,Son
Olarak yaz.
-Layout sec. Horizontal, OK.
-Name'ini de 'btnGrpNav' olarak degistir.
Isim degisiklikleri zorunlu degil ama VFP'nin verdikleriyle hayat zor.
-Simdi kodlarini yazalim.
-Once Form'un Load metodu (kisaca Form.Load)
-Form'a dblClick. Otomatikman 'Load' event kod penceresi gelmesi lazim. Sag ustten kontrol et. Degilse oradan Load sec.
Visual Fox Pro
Set Talk Off
Set Deleted On
Set Century On
Set Multilocks On
Set exclusive off
-Yaz.
-Form.Init kodu icin sag ustteki combodan 'Init' sec
Visual Fox Pro
SELECT kisi
store !EOF('kisi') to ;
this.btnSakla.Enabled, ;
this.btnGeriAl.Enabled, ;
this.btnSil.Enabled
this.btnGrpNav.SetAll('Enabled',!EOF('kisi'))
-Yaz. Kapa.
-Menuden Form\New property
Name:aktifKayit
Default/Initial value:0
[Add], [Close]
-Ekle butonuna dblklik
-Acilan kod penceresine:
Visual Fox Pro
thisform.aktifKayit = RECNO('kisi')
insert into ("kisi") (Ad,Soyad) values ("[Yeni]","[Yeni]")
store .F. to ;
this.parent.btnEkle.enabled, ;
this.parent.btnSil.enabled
store .T. to ;
this.parent.btnSakla.Enabled, ;
this.parent.btnGeriAl.Enabled
this.parent.btnGrpNav.SetAll('Enabled',.F.)
thisform.Refresh()
this.Parent.txtAd.SetFocus()
-Yaz kapa.
Diger kodlar (ayni sekilde butona dblklik ile kod penceresini ac, sag ustten gerekiyorsa ilgili kod'a git ve yaz)
*btnSakla Click
Visual Fox Pro
Tableupdate(2,.F.,'kisi')
Store !Eof('kisi') To ;
this.Parent.btnSakla.Enabled, ;
this.Parent.btnGeriAl.Enabled, ;
this.Parent.btnSil.Enabled
This.Parent.btnEkle.Enabled = .T.
This.Parent.btnGrpNav.SetAll('Enabled',!Eof('kisi'))
Thisform.aktifKayit = Recno('kisi')
*btnSil Click
Visual Fox Pro
If !Eof('kisi') And ;
MESSAGEBOX("Emin misiniz? Siliyorum ha, ona gore.",4+32+256,"Gereksiz soru",5000) = 6
Delete In 'kisi'
Skip In 'kisi'
If Eof()
Go Bottom In 'kisi'
Endif
Store !Eof('kisi') To ;
this.parent.btnSil.Enabled
this.parent.btnGrpNav.SetAll('Enabled',!EOF('kisi'))
thisform.aktifKayit = IIF(EOF('kisi'),0,RECNO('kisi'))
thisform.Refresh()
Endif
* btnGeriAl Click
Visual Fox Pro
Tablerevert(.F.,'kisi')
If Thisform.aktifKayit != 0 And ;
RECNO('kisi') != Thisform.aktifKayit
Go Thisform.aktifKayit In 'kisi'
Endif
Store !Eof('kisi') To ;
this.Parent.btnSakla.Enabled, ;
this.Parent.btnGeriAl.Enabled, ;
this.Parent.btnSil.Enabled
This.Parent.btnEkle.Enabled = .T.
This.Parent.btnGrpNav.SetAll('Enabled',!Eof('kisi'))
Thisform.Refresh()
* btnGrpNav Click
Visual Fox Pro
Select kisi
If Recno('kisi') < 0 Or At('2', Getfldstate(-1,'kisi')) > 0
If Messagebox("Degisikligi saklayayim mi?",4+32,"Degisiklik yakalandi") = 6
Tableupdate(2,.F.,'kisi')
Else
Tablerevert(.F.,'kisi')
Endif
Endif
Do Case
Case This.Value = 1 && ilk
Locate
Case This.Value = 2 && onceki
Skip -1
If Bof()
Locate
Endif
Case This.Value = 3 && sonraki
If !Eof()
Skip
Endif
If Eof()
Go Bottom
Endif
Case This.Value = 4 && son
Go Bottom
Endcase
Thisform.aktifKayit = Iif(Eof('kisi'),0,Recno('kisi'))
Thisform.Refresh()
-Son olarak. Form'un bos bir yerine klikle (PEM sheetde formun adi gorunecek, degistirmediysen Form1 - form ikonuyla). DataSession propertysini 2 yap.
Formun calistirilmaya hazir (aslinda her hangi bir anda calistirabilirsin, nerede ne eksik ya da hatali gorup duzeltirsin). Bos bir yere sag klik ve 'Run Form'. Saklayayim mi diye sorarsa (su anda soracak cunku bir suru degisiklik oldu), Yes.
Kabaca bak. ve kapat. Dizayndaki formu da kapat.
Command Window'a gidip.
Close all
do form kisi
Istedigin gibi oyna:)
Bunca zamandir tek bir form yaptik. Onu da cok uzattik. Ustune ustluk kodlarda bir suru tekrar vs var. Ama cok fonksiyonel olmasa ve tamamiyle aslinda bitmis olmasa da calisan birsey var:)
Acikcasi yazmaktan yoruldum. Simdilik bu kadarla kesip devamina baska bir mesajda bakalim. Arada forumdaki diger arkadaslarin da yardimiyla, ne, nerede, nasil aciklamalari olur. Kod tekrarinin engellenmesi, benzeri isin tekrar tekrar baska formlarda yapilmamasi gibi seyler de daha sonra.
Yapilan formu bozmaktan vs korkma, ekle, cikar, ne oluyor bak. Tabii once calisan bir halini saklarsan iyi olur. Saklayacagin iki dosya:
c:\VFPTestProjects\VFP ogreniyorum1\Forms\kisi.scx
c:\VFPTestProjects\VFP ogreniyorum1\Forms\kisi.sct