1

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

2

Re: formda kullanılabilen komutlar

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

3

Re: formda kullanılabilen komutlar

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

4

Re: formda kullanılabilen komutlar

Bu arada Soykan ın gönderdiği kodlar da birçok sorunumu çözmede yardımcı oldu. Teşekkürler.

5

Re: formda kullanılabilen komutlar

onders yazdı:

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

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

6

Re: formda kullanılabilen komutlar

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.

7 Son düzenleyen, metin (19.08.2010 13:35:52)

Re: formda kullanılabilen komutlar

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.

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

8

Re: formda kullanılabilen komutlar

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.

9

Re: formda kullanılabilen komutlar

onders yazdı:

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.

smile