Konu: formda kullanılabilen komutlar
Forma
- SELE 1,SELE 2 şeklinde birden fazla dosya açabilirmiyz ?
- SET ORDER TO 1 şeklinde USE bayrak INDEX bayrak1,bayrak2 INDEXLERİNİ kullanabilirmiyiz ?
- SEEK komutunu kullnabilirmiyz ?
Teşekkürler..
Giriş yapmadınız. Lütfen giriş yapın yada kayıt olun.
Forma
- SELE 1,SELE 2 şeklinde birden fazla dosya açabilirmiyz ?
- SET ORDER TO 1 şeklinde USE bayrak INDEX bayrak1,bayrak2 INDEXLERİNİ kullanabilirmiyiz ?
- SEEK komutunu kullnabilirmiyz ?
Teşekkürler..
-Eger hafiza ve dosya handle sorunun olmazsa 65535 tane acabilirsin.
-Kullanmasina kullanirsin da, bu artik foxbase degil VFP. Foxbase aliskanliklarindan kurtul, cdx kullan.
-Kullanamasan oyle bir komut olmazdi.
Bu sorulara bakinca, yanlis birseyleri yapmaya hazirlaniyorsun gibime geliyor. Boyle sorular yerine kisaca ne yapmak istedigini aciklasan daha iyi cozum onerenler olabilir.
Teşekkürler Çetin.
Hatırlarsan Foxpro DBase den Foxpro ya geçmeme sen yardımcı olmuştun. Bana Foxpro da Compile etmeyi sen öğretmiştin. -)). O zamanlar da bıkmadan yardımcı oluyordun, şimdi de devam ediyorsun.
Foxpro for dos da fazla kod yazdım ve Windows a geçmem gecikti. Windowsta ise vakitsizlikten dolayı ekranları dos ekranı şeklinde bırakıp bazı önemli programları (150-200 Ekran görüntüsü olan programlar var) windowsa geçirdim.
Ama yeni programlarda artık FORMkullanmak istiyorum. Çünkü kullanıcılar veri tabanı gücü yanında görsellik de istiyorlar.
Bu sitede senin örneklerin ve Tekin in örnegi üzerinden form mantığını kavramaya ve adım adım ilerlemeye çalışıyorum. Senin örneklerin gerçekten çok profesyonel. Ama duymadığım ve kullanımı bilmediğim birçok komut var. Bu yüzden örneklerini takip etmekte zorlanıyorum. Bana Tekin in örneği benim programlama mantığıma daha uygun geldi.. Belki Foxproyu öğrenmek için takip edttiğim kitap (Foxpro 2.6 For Windows-Memik Yanık) yüzündendir ?
Şu ana kadar çalıştığım şirket şirket için ve bunun dışında birkaç bütük özel yazılım oluşturdum. Elimdeki belli komutlar sayesinde bu yazılımlar oluştu ve yaklaşık 15 sene önce yazdığım ve bakım gerektirmeyen programlar var. Bu yüzden bulu dili de bırakmak istemiyorum.
Eski alışkanlıklardan mıdır bilmem yazarak formu oluşturmak bana daha kolay geldi. En azından kodlarda aradığımı bulabiliyorum. Hataları daha kolay ayıklayabiliyorum.
Takıldığım yerdelre sitedeki üyeler yardımcı oluyorlar. Bu da çok güzel birşey.
Bu arada Elimdeki lisanslı paket Visual Studio Enterp. Edition . Yani VFP 6.0.
Şu ana kadar yapmayı başardığım form aşağıda . Eksik bulanlar veya önerileri olan varsa ve bildirirlerse sevinirim.
Şimdiden teşekkürler.
************************************************************************************************************************************
Clear All
SET TALK OFF
SET NOTIFY OFF
SET DELE ON
*SELE 1
*USE bayrak INDEX bayrak1,bayrak2
Public oForm
oForm = Createobject("bayrak")
oForm.Show(1)
Define Class bayrak As Form
DataSession = 2
Top = 2
Left = 50
Height = 390
Width = 350
Name = "bayrak"
Caption = "Bayrak Kodu"
orecord = .Null.
Add Object lblno As Label With ;
left = 5, Top = 5, Width = 45, Caption = "Kodu :"
Add Object lbladi As Label With ;
left = 5, Top = 30, AutoSize=.T., Caption = "Adı :"
Add Object txtNo As myTextBox With ;
Top = 2, ;
left = 45, ;
Width = 35, ;
Enabled = .F.
*SelectOnEntry = .T., ControlSource = "bayrak.no"
Add Object txtAdi As myTextBox With ;
Top = 27, ;
left = 45, ;
Width = 150, ;
Enabled = .F.
*,ControlSource = "bayrak.adi"
Add Object cmdNew as CommandButton With ;
Top = 2, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Yeni Kayıt', ;
Enabled = .t.
Add Object cmdSave as CommandButton With ;
Top = 2, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Sakla', ;
Visible = .f.
Add Object cmdSave2 as CommandButton With ;
Top = 2, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Sakla', ;
Visible = .f.
Add Object cmdEdit as CommandButton With ;
Top = 32, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Düzelt', ;
Enabled = .t.
Add Object cmdCancel as CommandButton With ;
Top = 32, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Vazgeç', ;
Visible = .f.
Add Object cmdUpdate as CommandButton With ;
Top = 32, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Sakla', ;
Visible = .f.
Add Object cmdDelete as CommandButton With ;
Top = 62, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Sil', ;
Enabled = .t.
Add Object cmdClose as CommandButton With ;
Top = 92, ;
Left = 250, ;
Height = 27, ;
Width = 84, ;
Caption = 'Kapat'
Add Object grdListe as myGrid
Procedure cmdNew.Click
ppNew()
EndProc
Procedure cmdSave.Click
ppSave()
EndProc
Procedure cmdSave2.Click
ppSave2()
EndProc
Procedure cmdCancel.Click
ppCancel()
EndProc
Procedure cmdEdit.Click
ppEdit()
EndProc
Procedure cmdDelete.Click
myDelete()
EndProc
Procedure cmdClose.Click
CLOSE ALL
thisform.Release
EndProc
* Add Object grdOrders As Grid With ;
* Left = 10, Top = 90, Height = 400, Width = 780, ;
* RecordSource = "Orders", ;
* LinkMaster = "Customer", ;
* ChildOrder = "cust_id",;
* RelationalExpr = "cust_id"
Procedure Load
SELE 1
USE bayrak INDEX bayrak1,bayrak2
* Use bayrak INDEX bayrak1,bayrak2
* In 0
* Use (_samples+"data\orders") In 0
* cursorsetprop("buffering",5,"customer")
* cursorsetprop("buffering",5,"orders")
Endproc
Enddefine
******************************************************************
Define Class myTextBox as TextBox
******************************************************************
Enabled = .f.
DisabledForeColor = Rgb(0,0,0)
SelectOnEntry = .t.
EndDefine
******************************************************************
Procedure ppNew
******************************************************************
With oForm
* APPEND BLANK
.txtNo.Enabled = .t.
.txtNo.Value = 0
.txtAdi.Enabled = .t.
.txtAdi.Value = ''
.cmdNew.Visible = .f.
.cmdSave.Visible = .t.
.cmdCancel.Visible = .t.
.cmdEdit.Visible = .f.
.cmdDelete.Visible = .f.
.cmdClose.Visible = .f.
* .grdListe.Enabled = .f.
.txtNo.SetFocus()
EndWith
EndProc
******************************************************************
Procedure ppSave
******************************************************************
With oForm
sakla1=RECNO()
If .txtNo.Value > 0
SET ORDER TO 1
SEEK .txtNo.Value
* ? .txtNo.Value
* BROWSE
* WAIT
IF FOUND()
* ? "11"
* WAIT
* GO sakla1
* DELE
MessageBox('Aynı Numaralı'+Chr(13)+'Kayıt Mevcut')
ELSE
* ? "22"
* WAIT
APPEND BLANK
REPLA no WITH .txtNo.Value
REPLA adi WITH .txtAdi.Value
* Thisform.Refresh()
MessageBox('Kayıt işlemi'+Chr(13)+'başarıyla tamamlandı')
ENDIF
EndIf
.txtNo.Enabled = .f.
.txtAdi.Enabled = .f.
.cmdNew.Visible = .t.
.cmdSave.Visible = .f.
.cmdCancel.Visible = .f.
.cmdEdit.Visible = .t.
.cmdDelete.Visible = .t.
.cmdClose.Visible = .t.
.grdListe.Refresh()
.grdListe.SetFocus()
* .cmdListe.Click()
* .grdListe.Enabled = .t.
* .grdListe.SetFocus()
EndWith
EndProc
******************************************************************
Procedure ppSave2
******************************************************************
With oForm
* REPLA no WITH .txtNo.Value
REPLA adi WITH .txtAdi.Value
.txtNo.Enabled = .f.
.txtAdi.Enabled = .f.
.cmdNew.Visible = .t.
.cmdSave.Visible = .f.
.cmdCancel.Visible = .f.
.cmdEdit.Visible = .t.
.cmdDelete.Visible = .t.
.cmdClose.Visible = .t.
.grdListe.Refresh()
.grdListe.SetFocus()
* .cmdListe.Click()
* .grdListe.Enabled = .t.
* .grdListe.SetFocus()
EndWith
EndProc
******************************************************************
Procedure ppCancel
******************************************************************
With oForm
.txtNo.Enabled = .f.
.txtAdi.Enabled = .f.
.cmdNew.Visible = .t.
.cmdSave.Visible = .f.
.cmdSave2.Visible = .f.
.cmdCancel.Visible = .f.
.cmdEdit.Visible = .t.
.cmdDelete.Visible = .t.
.cmdClose.Visible = .t.
.grdListe.Refresh()
.grdListe.SetFocus()
* .cmdListe.Click()
* .grdListe.Enabled = .t.
* .grdListe.SetFocus()
EndWith
EndProc
******************************************************************
Procedure ppEdit
******************************************************************
With oForm
* APPEND BLANK
.txtNo.Enabled = .f.
.txtNo.Value = no
.txtAdi.Enabled = .t.
.txtAdi.Value = adi
.cmdNew.Visible = .f.
.cmdSave2.Visible = .t.
.cmdCancel.Visible = .t.
.cmdEdit.Visible = .f.
.cmdDelete.Visible = .f.
.cmdClose.Visible = .f.
* .grdListe.Enabled = .f.
.txtAdi.SetFocus()
EndWith
EndProc
******************************************************************
Procedure myDelete
******************************************************************
With oForm
* If .tnHandle > 0
m.lnResult = MessageBox('Silmek istediğinize'+Chr(13)+'eminmisiniz?', ;
4+32+256, 'Silme Onayı')
If lnResult = 6
DELE
MessageBox('Silme işlemi'+Chr(13)+'başarıyla tamamlandı', 64, 'Silme Onayı')
* .cmdListe.Click()
.grdListe.Refresh()
.grdListe.SetFocus()
EndIf
* EndIf
EndWith
EndProc
******************************************************************
Define Class myGrid as Grid
******************************************************************
Top = 62
Left = 2
Height = 310
Width = 220
ColumnCount = 2
DeleteMark = .t.
RecordMark = .t.
ReadOnly = .T.
RecordSource = "bayrak"
ScrollBars = 2
GridLineColor = Rgb(192,192,192)
Procedure Init
With this
* Scatter Name This.oRecord Memo
.Column1.Header1.Caption = 'Kodu'
.Column1.Width = 50
.Column2.Header1.Caption = 'Adı'
.Column2.Width = 150
* .Column3.Header1.Caption = 'Yaşı'
* .Column4.Header1.Caption = 'Maaşı'
* .Column4.Width = 100
EndWith
this.SetAll('Enabled',.f.,'textbox')
this.SetAll('DisabledForeColor',0,'textbox')
EndProc
Procedure AfterRowColChange
Lparameters nColIndex
DoDefault(nColIndex)
With oForm
.txtno.Value = No
.txtadi.Value = Adi
* .txtYas.Value = Yas
* .txtMaas.Value = Maas
EndWith
Thisform.Refresh()
EndProc
EndDefine
Bu arada Soykan ın gönderdiği kodlar da birçok sorunumu çözmede yardımcı oldu. Teşekkürler.
...
Foxpro for dos da fazla kod yazdım ve Windows a geçmem gecikti. Windowsta ise vakitsizlikten dolayı ekranları dos ekranı şeklinde bırakıp bazı önemli programları (150-200 Ekran görüntüsü olan programlar var) windowsa geçirdim.
...
bunu nasıl başardın? ben de denemeye kalktım. courier new kullandım. ama yine de baktım çok fazla çaba gerekiyordu. eğer kolayca mümkün kılan bir yol varsa ben de istiyorum. çünkü özellikle rdp bağlantılarda tmp dosyaları ile ilgili problem yaşıyorum foxpro dos ile.
Ben her ekran için ayrı bir .PRG dosyası kullanıyorum.
Bende daha çok taşımalardan doğan renk problemleri ve yazılarda türkçe karakter problemleri oluştu. Onun dışında kodlarda çok fazla oynama yapmadım.
SET COLOR TO W+/B+,B+/W+
ları kaldırıp
COLOR R+/B+ FONT "COURIER NEW",10 STYLE "B"
eklemelerini yaptım.
Compile edince sorunsuz çalıştı.
Dosya yapısı olarak .DBF dosyalarını kullanıyorum. Dosta arada bir yaşadığım dosya bozulmasını dostan Windows a geçtikten sonra neredeyse hiç yaşamadım.
Tüm prg leri compile edip tek bir .EXE haline getirip kullanıyorum.
ben de courier new ile denedim ama fieldlar çubuklar filan düzgün olmadı istediğim gibi. ekranlar çok karışık durdu. vazgeçtim. sqlserver+vfp formlarıyla yazmaya karar verdim. .dbf ile bozulmalar vfp'de de oluyor dos kadar olmasa da. bir de 2gb sınırı var tabi.
Ben ekranlarda grid benzeri görünm için kendi yazdığım özel bir kod kullanıyorum.. Aşağı, yukarı cusror hareketleri, Page UP, page DOWN, seçim tuşları için ayrı kontroller var baştan beri yazdığım programlarda. Onun için ekıranlarda renk sornu ve font sorunu dışında problem yaşamadım.
Ben ekranlarda grid benzeri görünm için kendi yazdığım özel bir kod kullanıyorum.. Aşağı, yukarı cusror hareketleri, Page UP, page DOWN, seçim tuşları için ayrı kontroller var baştan beri yazdığım programlarda. Onun için ekıranlarda renk sornu ve font sorunu dışında problem yaşamadım.