1

Konu: Browse komutunda renkli gösterme

Sevgili Arkadaşlar,
Kullanmakta olduğum bir database dosyasında tarih isimli bir field var. Program içerisinden bu dosyayı
browse for tarih <= date()+1  komutuyla goruntuluyorum.
Sormak istediğim şu:
Tarih = date()+1 olan kayıtları yeşil zeminde beyaz yazıyla,
tarih = date() olan kayıtları mavi zeminde beyaz yazıyla,
tarih < date() olan kayıtları ise kırmızı zeminde beyaz yazıyla görüntülemek istiyorum.
Bütün çabalarıma karşın bunu beceremedim.
Siz ne önerirsiniz?
Böyle bir olasılık varsa benim VFP9 da çok acemi olduğumu gözönünde bulundurarak olabildiğince detaylı ve anlaşılır bir biçimde anlatmanızı rica ederim.
İlgilenecek arkadaşlara şimdiden çok teşekkür ederim.
Sevgilerimle.
Erdal

2

Re: Browse komutunda renkli gösterme

grid kullan. browse windows için çok ilkel bir komut.

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

3

Re: Browse komutunda renkli gösterme

Merhaba,
Bu dediğini bir GRID ile yapabilirsin.
Bu işi yapmanın bir çok yolu var ben en basitini anlatmaya çalışayım.

1. Tasarım aşamasında formun üzerinde farenin sağ tuşuna bas.
2. Açılan pencereden Data Environment'i seç.
3. Data Environment içinde herhangi bir tablo yoksa "Add Table or View" penceresi açılır.
4. Bu pencereden istediğin tabloyu seç.
5. Şimdi Data Environment penceresinde görünen tabloyu fare ile tutup form üzerine sürükle ve bırak.
6. Şimdi formun üzerinde bir Grid göreceksin.
7. Formun Init Event'ine aşağıdaki kodu kendine uygun hale getirerek yaz.

Visual Fox Pro
ThisForm.grdSonuc.SetAll("DynamicBackColor", "IIf(dTarih > Date(), RGB(255,0,0), IIf(dTarih < Date(), RGB(0,0,255), RGB(0,255,0)))", "Column")


9. Formu çalıştır.

Not:
grdSonuc, Gid objesinin adıdır.
dTarih, kullanılan tablodaki bir saha adıdır.

/o---------------------o\
     www.haser.com
\o---------------------o/

4

Re: Browse komutunda renkli gösterme

Sevgili Tarkan,
Benim programımda form yok. Bu program benim clipper ile yazdığım bir program ve onu VFP9 a adapte etmeğe çalışıyorum. Form olmadan grid kullanmama olanak var mı? Varsa nasıl oluyor?
İlgine ve bundan sonraki yardımlarına şimdiden çok teşekkur ederim.
Sevgilerimle.
Erdal
Not: Gerçekten OOP konusunda zırcahilim ve kaynak kıtlığından da çok zor öğrenebiliyorum.sad

5 Son düzenleyen, taRKan (24.09.2009 21:39:17)

Re: Browse komutunda renkli gösterme

Merhaba Erdal,
Haddim olmadan bir yorum yapmak isterim.
Bence programını VFP'e uyarlama
VFP için yeniden yaz.
Form kullanmadan grid kullanmak pek mümkün değil. (_Screen objesine grid eklenebilir ama bana pek mantıklı gelmiyor). Bunun yerine bir form tasarlayabilirsin. Bu forma kullandığın aliasi ve gerekli parametreleri gönderebilirsin. Form üzerindeki grid'i gerektiği gibi ayarlayabilir. Browse komutunun yerine bu formu çağırabilirsin.

Örnek olarak aşağıdaki kodu gönderiyorum.

Visual Fox Pro
Public goForm As Form

 
Create Cursor Deneme (cAd C(20), cSoyad C(30), dKayitTarihi D)
Insert Into Deneme Values("Tarkan", "Haser", Date(2000, 5, 5))
Insert Into Deneme Values("Özgür", "Yıldırım", Date(2001, 4, 14))
Insert Into Deneme Values("Mutlu", "Önder", Date(2003, 6, 11))
Insert Into Deneme Values("Mustafa", "Ceyhan", Date(2005, 11, 3))
Locate
 
m.goForm = CreateObject("TabloGoster", "Deneme", "Üyeler", "IIf(dKayitTarihi < Date(2003,1,1), RGB(255,0,0), RGB(0,0,255))")
m.goForm.Show(1)
 
DEFINE CLASS TabloGoster As Form
 
    Height = 200
    Width = 320
    DoCreate = .T.
    Name = "frmTabloGoster"
 
 
    ADD OBJECT grdtablogoster AS Grid WITH ;
        Anchor = 15, ;
        Name = "grdTabloGoster"
 
 
    PROCEDURE Init
        LParameters tcAlias As String, tcBaslik As String, tcDynamicBackColor As String
        If Empty(m.tcAlias) Or Type("tcAlias") <> "C" Or !Used(m.tcAlias)
            Return .F.
        EndIf
        With ThisForm
            If Empty(m.tcBaslik)
                .Caption = m.tcAlias
            Else
                .Caption = m.tcBaslik
            EndIf
            Local lnI As Integer, loObje As Object
 
            With .grdTabloGoster
                .ColumnCount = FCount(m.tcAlias)
                .RecordSource = m.tcAlias
                For m.lnI = 1 To .ColumnCount
                    For Each m.loObje In .Columns(m.lnI).Objects
                        If m.loObje.BaseClass = "Header"
                            m.loObje.Caption = Field(m.lnI, m.tcAlias)
                        EndIf
                    EndFor
                EndFor
                If !Empty(m.tcDynamicBackColor) And Type("m.tcDynamicBackColor") = "C"
                    .SetAll("DynamicBackColor", m.tcDynamicBackColor, "Column")
                EndIf
            EndWith
        EndWith
    ENDPROC
ENDDEFINE
/o---------------------o\
     www.haser.com
\o---------------------o/

6

Re: Browse komutunda renkli gösterme

erdal1941 yazdı:

Sevgili Tarkan,
Benim programımda form yok. Bu program benim clipper ile yazdığım bir program ve onu VFP9 a adapte etmeğe çalışıyorum. Form olmadan grid kullanmama olanak var mı? Varsa nasıl oluyor?
İlgine ve bundan sonraki yardımlarına şimdiden çok teşekkur ederim.
Sevgilerimle.
Erdal
Not: Gerçekten OOP konusunda zırcahilim ve kaynak kıtlığından da çok zor öğrenebiliyorum.sad

Bence de Tarkan'in dedigi gibi bastan yaz. Ben de tum foxpro 2.x programlarimi VFPde bastan yazdim. Foxpro 2.x - > VFP gecisinde ne zamanki onlarin artik ayni degil sadece benzer isimli diller oldugunu dusunuyorsun rahatliyorsun:)

Browse VFP'de bir cesit grid ve onu grid olarak kullanabilirsin (tabii tekrar etmekte fayda var, ben de browse yap demiyorum, Tarkan gibi bastan yaz diyorum ama sadece yapilabildigini gostermek icin ekliyorum). Ornegin:

Visual Fox Pro
Use (_samples+'data\customer')

lSet = .F.
Browse ;
  Name "oBrowse" ;
  Title 'Musteri Listesi' ;
  When SetGrid()
 
Function SetGrid
If !m.lSet
  With oBrowse
    .DeleteMark = .F.
    .RecordMark = .F.
    .GridLines = 2
    .ScrollBars = 2
    .AllowRowSizing = .F.
    .Height = 400
    .Width = 600
    .SetAll("DynamicBackColor", "iif(recno()%2=0,0xFFFFFF,0x00FFFF)")
  Endwith
  lSet=.T.
Endif

7

Re: Browse komutunda renkli gösterme

(Yesil ustunde siyah daha iyi duruyor)

Visual Fox Pro
Select Date()-5+Int(Rand()*7) As tarih,* ;

  FROM (_samples + 'data\orders') ;
  INTO Cursor ornek ;
  nofilter
Local lSet
Browse For tarih <= Date()+1 ;
  TITLE 'Renkli Browse' ;
  WHEN SetGrid(@lSet) ;
  NAME oBrowse
 
Function SetGrid(tlSet)
  If !m.tlSet
    With oBrowse
      .DeleteMark = .F.
      .RecordMark = .F.
      .GridLines = 2
      .ScrollBars = 2
      .AllowRowSizing = .F.
      .Height = 400
      .Width = 600
      .SetAll("DynamicForeColor", 'ICASE('+;
        'Tarih = date()+1, 0,'+;
        '0xFFFFFF)')
      .SetAll("DynamicBackColor", 'ICASE('+;
        'Tarih = date()+1, 0x00FF00,'+;
        'Tarih = date(), 0xFF0000, '+;
        '0x0000FF)')
    Endwith
    tlSet=.T.
  Endif
endfunc

8

Re: Browse komutunda renkli gösterme

Çetin,
Browse komutunda Name tanımlanıp bu şekilde kullanıldığını ilk defa görüyorum. Browse komutunu 2.6'da çok iyi kullanıyordum ama VFP geçtiğimde onun name özelliği ile bir grid objesi gibi olabileceği hiç aklıma gelmemişti ve yardım dosyasını da okumamıştım.
Allah aşkına bu küçük detayları nereden öğreniyorsun smile
Ben bir yerleri okumuyor ya da takip etmiyorum galiba
Nedir bu işin sırrı?

/o---------------------o\
     www.haser.com
\o---------------------o/

9

Re: Browse komutunda renkli gösterme

cetinbasoz yazdı:
erdal1941 yazdı:

Sevgili Tarkan,
Benim programımda form yok. Bu program benim clipper ile yazdığım bir program ve onu VFP9 a adapte etmeğe çalışıyorum. Form olmadan grid kullanmama olanak var mı? Varsa nasıl oluyor?
İlgine ve bundan sonraki yardımlarına şimdiden çok teşekkur ederim.
Sevgilerimle.
Erdal
Not: Gerçekten OOP konusunda zırcahilim ve kaynak kıtlığından da çok zor öğrenebiliyorum.sad

Bence de Tarkan'in dedigi gibi bastan yaz. Ben de tum foxpro 2.x programlarimi VFPde bastan yazdim. Foxpro 2.x - > VFP gecisinde ne zamanki onlarin artik ayni degil sadece benzer isimli diller oldugunu dusunuyorsun rahatliyorsun:)

Browse VFP'de bir cesit grid ve onu grid olarak kullanabilirsin (tabii tekrar etmekte fayda var, ben de browse yap demiyorum, Tarkan gibi bastan yaz diyorum ama sadece yapilabildigini gostermek icin ekliyorum). Ornegin:

Visual Fox Pro
Use (_samples+'data\customer')

lSet = .F.
Browse ;
  Name "oBrowse" ;
  Title 'Musteri Listesi' ;
  When SetGrid()
 
Function SetGrid
If !m.lSet
  With oBrowse
    .DeleteMark = .F.
    .RecordMark = .F.
    .GridLines = 2
    .ScrollBars = 2
    .AllowRowSizing = .F.
    .Height = 400
    .Width = 600
    .SetAll("DynamicBackColor", "iif(recno()%2=0,0xFFFFFF,0x00FFFF)")
  Endwith
  lSet=.T.
Endif


Üstad;

Pes yani. Hani "Bu mudur? Budur!" dedirten, çok basit görünen, bir gösteren olmazsa da hayatta insanın aklına gelmiycek (en azından benim) bir kod.

Yine her zamanki gibi Çetin Başöz farkı.

Erdal abi; Çetin Üstad hakkındaki yorumuna aynen katılıyorum. Fazla uzun bir süre olmasa da bir süredir sağdan soldan baya bi kod örneği toparladım. Ama Çetin Üstad beni her seferinde şaşırtıyor.

Üstad, sen farkında değilsin, sana çok basit geliyor olabilir. Yada herkes biliyor diye de düşünüyor olabilirsin. Bait kodların öyle güzel fikirlere kapı açıyor ki smile

Çok teşekkürler.
--------------------------------

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ü

10

Re: Browse komutunda renkli gösterme

Sevgili Çetin,
Önerdiğin "Yeşil üstüne siyah daha iyi çalışıyor" başlıklı program tam istediğim gibi çalıştı.
Sana ve sorunuma ilgi gösterip çözüm arayan arkadaşlara sonsuz teşekkur ederim.
Sevgilerimle.
Erdal

11

Re: Browse komutunda renkli gösterme

Isinize yaradiysa ne guzel:)
Tarkan,
Ben eskiden beri browse'nin foxpronun en guclu komutu oldugunu dusundugumden biraz "browse manyagi" sinifina giriyorum:) Simdi ise grid ayni sekilde, o nedenle sirlarini tamamlayamasam da daha cok ogrendim herhalde ( Foxyclasses'ta bile 3 tane grid class'i var ).