1

Konu: Gridi Renklendirme

Griddeki kolonları renklendirmek için mygrid.setall("....   komutunu kullanarak backcolor veya forecolor larını renklendirebiliyorm. Griddeki column?.text1.forecolor' ları 0, sıfırdan küçük ve sıfırdan büyük şeklinde 3 tercihli nasıl belirtebilirim. Örnek: Griddeki text1 lerdeki tüm 0 lar mavi, sıfırdan kücük olanlar  kırmızı, 0 dan büyük ise yeşil gibi.

2

Re: Gridi Renklendirme

column 'un DynamicBackColor ını aşağıdaki gibi düznlersen koşula göre renklenir.
aynı işlemi yazı rengi içinde uygulayabilirsin. DynamicForeColor ..

iif(seplist.sd="1",rgb(255,0,0),rgb(255,255,255))

3

Re: Gridi Renklendirme

DynamicBackColor'ı iki kez kullanabilirsiniz.

4 Son düzenleyen, cetinbasoz (23.09.2007 13:26:02)

Re: Gridi Renklendirme

VFP9 kullaniyorsan icase() kullanabilirsin. Yoksa icice iif():

Visual Fox Pro
thisform.myGrid.SetAll( "DynamicBackColor", ;

"(icase( alias.Field < 0, 0xFF, alias.Field > 0, 0x00FF00, 0xFF0000))" )


Visual Fox Pro
thisform.myGrid.SetAll( "DynamicBackColor", ;

"(iif( alias.Field < 0, 0xFF, iif(alias.Field > 0, 0x00FF00, 0xFF0000)))" )


Bu iş kolay görünüyor, ancak senin şartın karmaşıklaştıkça bu icase(), iif() vs yazmak zorlaşıyor ve hata yapma şansı artıyor. Hatalı yazdıysan, VFP hata mesajı vermez ama renklendirmeyi de yapmaz.
O nedenle karmaşık ifadeleri oraya yazmak yerine, oraya cok basit bir ifade yazabilirsin:

Visual Fox Pro
thisform.myGrid.SetAll( "DynamicBackColor", "(thisform.GridArkaRenk())" )


İhtiyacına gore o metoda parametre de gonderebilirsin ve SetAll'un cozemedigi durumlarda daha esnek kullanabilirsin.

Parametreli ve SetAll'un cevap olmadıgı durumlar icin ornek:

Visual Fox Pro
Public oForm

oForm =  Createobject("myForm")
oForm.Show()
 
Define Class myForm As Form
  DataSession = 2
  Height = 600
  Width = 800
 
  Add Object grid1 As Grid With ;
    left=0,Width = 400,Height=600,RecordSource="ornekData"
 
  Add Object grid2 As Grid With ;
    left=400,Width = 400,Height=600,RecordSource="ornekData"
 
  Procedure Load
    Rand(-1)
    Select ;
      Int(Rand()*20) - 10 As sayi, ;
      Company, ;
      Country, ;
      DATE(2006, Int(Rand()*11)+1, 1) As tarih ;
      FROM (_samples+'data\customer') ;
      INTO Cursor ornekData ;
      nofilter
  Endproc
 
  Procedure grid1.Init
    This.Columns(1).Width = 30
    This.Columns(2).Width = 200
    This.Columns(3).Width = 60
    This.Columns(4).Width = 60
 
    This.SetAll("DynamicBackColor", "(thisform.GridArkaRenkOrnek1( ornekData.Sayi ))")
  Endproc
 
  Procedure grid2.Init
    This.Columns(1).Width = 30
    This.Columns(2).Width = 200
    This.Columns(3).Width = 60
    This.Columns(4).Width = 60
 
    Local ix
    For ix = 1 To This.ColumnCount
      With This.Columns(m.ix)
        .DynamicBackColor = ;
          "(thisform.GridArkaRenkOrnek2('" + .ControlSource +"'))"
      Endwith
    Endfor
  Endproc
 
  Procedure GridArkaRenkOrnek1(tnSayi)
    Do Case
      Case m.tnSayi > 0
        Return 0x00FF00
      Case m.tnSayi < 0
        Return 0xFF
      Otherwise
        Return 0xFF0000
    Endcase
  Endproc
 
  Procedure GridArkaRenkOrnek2(tcControlSource)
    Local lcType, luValue
    lcType = Type(m.tcControlSource)
    If m.lcType != "G"
      luValue = Evaluate(m.tcControlSource)
    Endif
    Do Case
      Case m.lcType = "C"
        * Degerin crc degerine gore renk
        Return BITLSHIFT(VAL(SYS(2007,m.luValue)),8)
      Case m.lcType = "D"
        * 3 aylik donemlere gore renk
        Do Case
          Case Ceiling(Month(m.luValue)/3) = 1
            Return 0xFFFF00
          Case Ceiling(Month(m.luValue)/3) = 2
            Return 0xFF00FF
          Case Ceiling(Month(m.luValue)/3) = 3
            Return 0x00FFFF
          Otherwise
            Return 0xC0C0C0
        Endcase
      Case m.lcType = "N"
        Do Case
          Case m.luValue > 0
            Return 0x00FF00
          Case m.luValue < 0
            Return 0xFF
          Otherwise
            Return 0xFF0000
        Endcase
    Endcase
    Return 0xFFFFFF
  Endproc
Enddefine

5

Re: Gridi Renklendirme

Çetin bey teşekkür ederim. örnek2 procedurunu uygulayınca istediğim sonucu aldım.

6

Re: Gridi Renklendirme

merhabalar,
klpkod    makina
klp001    mk01
klp001    mk02
klp003    mk01
klp004    mk08
klp004    mk01

şeklinde bir tableda klpkod değiştiğinde satır renginide nasıl değiştirebilirim

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

7

Re: Gridi Renklendirme

http://www.fox4um.com/post/9904/#p9904

8

Re: Gridi Renklendirme

çetin bey link olarak bu sayfayı vermişsiniz, defalarca bakmıştım bu sayfaya ve birtürlü yapamadım,o yüzden yine bu sayfaya yazdım smile

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

9

Re: Gridi Renklendirme

gride bağladığın cursora bir field daha aç (.t., .f. girilecek):
örneğin gridcursoru( klpkod C(10),   makina C(10)  ,değişti L)

klpkod u bağladığın myform.mygrid.Column1.Text1.InteractiveChange evente:
REPL gridcursoru.değişti WITH .t. IN gridcursoru

myform.mygrid.SetALL;
("DynamicForeColor","IIF(gridcursoru.değişti,RGB(100,200,200),RGB(200,200,100))","Column")

VFP9 SP2

10

Re: Gridi Renklendirme

Visual Fox Pro
Public oform

 
oform=Newobject("myForm")
oform.Show
Return
 
Define Class myForm As Form
  DataSession = 2
  Top = 0
  Left = 0
  Height = 300
  Width = 500
 
  Add Object grdcustomer As Grid With ;
    Height = 280, Left = 10, ;
    RecordSource = "select * from (_samples+'data\customer') order by country into cursor crsByCountry", ;
    RecordSourceType = 4, ;
    Top = 10, Width = 480
 
  Procedure Init
    With This.grdcustomer
      .AddProperty('cCurCountry','')
      .SetAll("DynamicBackColor", ;
        "IIF(crsByCountry.Country=this.cCurCountry,0xC0C0C0,0xFFFFFF)")
    Endwith
  Endproc
 
  Procedure grdcustomer.BeforeRowColChange
    Lparameters nColIndex
    Thisform.LockScreen = .T.
  Endproc
  Procedure grdcustomer.AfterRowColChange
    Lparameters nColIndex
    This.cCurCountry = crsByCountry.Country
    Thisform.LockScreen = .F.
  Endproc
 
Enddefine

11

Re: Gridi Renklendirme

çetin bey istediğimden çokdaha güzel bir çözüm sundunuz çok teşekkür ederim.
bu örneği locator gridde kullanmak istedim ama olmadı, gerçi locatorgridde kullanmak nekadar mantıklı bilmiyorum ama en azından denemek isterim.
form inite

Visual Fox Pro
SET NULLDISPLAY TO ""

WITH ThisForm.locatorgrid1
.csql = " A.klpkod,A.tanim,A.klpgoz,b.TEZGAH,B.SIRA "+;
"from klp_kart A left join KLP_TEZ B on A.klpkod = B.klpkod order by B.klpkod"
 
.init()
.Width = 800
.Height = 500
.columncount = 5
.column1.width = 80
.....
.column5.width = 100
.addproperty('cklpkod','')
 
.SetAll("DynamicBackColor", ;
        "IIF(this.recordsource+'.klpkod')=this.cklpkod,0xC0C0C0,0xFFFFFF)")
ENDWITH

locatorgrid1.afterrowcolchange

Visual Fox Pro
lparameters nColIndex

This.cklpkod = (this.recordsource+'.klpkod')
    Thisform.LockScreen = .F.


beforerowcolchange e ise

Visual Fox Pro
LPARAMETERS nColIndex

Thisform.LockScreen = .T.


yazdım

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

12 Son düzenleyen, cetinbasoz (25.03.2010 18:00:42)

Re: Gridi Renklendirme

Ah locatorgridde isler oyle degil, Onun zaten kullandigi dynamicbackcolor yani sira before/afterrowcolchange event kodu var.

Visual Fox Pro
Public oform

 
oform=Newobject("myForm")
oform.Show
Return
 
Define Class myForm As Form
  DataSession = 2
  Top = 0
  Left = 0
  Height = 300
  Width = 500
 
  Add Object grdcustomer As locGrid With ;
    Height = 280, Left = 10, ;
    Top = 10, Width = 480
 
  Procedure Init
    With This.grdcustomer
      .cSQL = "* from (_samples+'data\customer') order by country"
      .Init()
      .AddProperty('cCurCountry','')
 
      * BackColor
      .SetAll("DynamicBackColor", ;
        "IIF("+ .RecordSource + ".Country=this.cCurCountry,0xA0FFFF,0xFFFFFF)")
 
      * Secili kaydin fontu bold ve arka alan rengiyle uyumlu 'sari-lacivert renklerimiz...';)
      .SetAll("DynamicFontBold", "RecNo(This.RecordSource) = This.nCurRec")
      .SetAll("DynamicForeColor", "(IIF(RecNo(This.RecordSource) = This.nCurRec, 0xFF2020,0))")
    Endwith
  Endproc
 
 
  Procedure grdcustomer.AfterRowColChange
    Lparameters nIndex
    This.cCurCountry = Evaluate(This.RecordSource+'.Country')
    DoDefault(m.nIndex)
  Endproc
 
Enddefine
 
Define Class locGrid As locatorgrid Of 'd:\foxyclasses\classes\grids.vcx'
Enddefine


Not: Renkleri degistirirsen ben gormeyeyim:)

13

Re: Gridi Renklendirme

çetin bey ellerinize sağlık tadından yenmiyo valla smile
çok teşekkür ederim

Not : renkleri değiştirmedim aslına sadık kaldım

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

14

Re: Gridi Renklendirme

Bu güzel örnekler den olayı tekrar foxpro dostlarına teşekkür ederim.İhtiyaç oldu,ilaç gibi geldi valla.. eksik olmayınız lol

En büyük sermaye nakit,nakit sermaye vakittir...

15

Re: Gridi Renklendirme

Üstat gerçekten çok güzel örnek.

Ellerine sağlık smile

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ü

16

Re: Gridi Renklendirme

print için şunu yazdım
SELECT tanim,oneri,birim,miktar ,kod ,termin FROM crsmrpt2  WHERE oneri>0  INTO CURSOR crsmrptui ORDER BY kod,termin

REPORT FORM "E:\PLANPRES\emir\raporlar\IHTURUN.frx" TO PRINTER PROMPT PREVIEW

print butonuna bastıktan sonra form ekranına döndüğünde form ekranı beyaz oluyor  formun içinde herhangi biryere tıkladığında yine normale dönüyor.bunu nasıl düzeltebilirim


cetinbasoz yazdı:
Visual Fox Pro
Public oform

 
oform=Newobject("myForm")
oform.Show
Return
 
Define Class myForm As Form
  DataSession = 2
  Top = 0
  Left = 0
  Height = 300
  Width = 500
 
  Add Object grdcustomer As Grid With ;
    Height = 280, Left = 10, ;
    RecordSource = "select * from (_samples+'data\customer') order by country into cursor crsByCountry", ;
    RecordSourceType = 4, ;
    Top = 10, Width = 480
 
  Procedure Init
    With This.grdcustomer
      .AddProperty('cCurCountry','')
      .SetAll("DynamicBackColor", ;
        "IIF(crsByCountry.Country=this.cCurCountry,0xC0C0C0,0xFFFFFF)")
    Endwith
  Endproc
 
  Procedure grdcustomer.BeforeRowColChange
    Lparameters nColIndex
    Thisform.LockScreen = .T.
  Endproc
  Procedure grdcustomer.AfterRowColChange
    Lparameters nColIndex
    This.cCurCountry = crsByCountry.Country
    Thisform.LockScreen = .F.
  Endproc
 
Enddefine
Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)

17

Re: Gridi Renklendirme

Raporu çalıştırmadan önce :

Visual Fox Pro
ThisForm.LockScreen = .T.


Rapordan sonra


Visual Fox Pro
ThisForm.LockScreen = .F.
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ü

18

Re: Gridi Renklendirme

uğur yardımın için çok teşekkür ederim

Kader, beyaz kağıda sütle yazılmış yazı
Elindeyse beyazdan, gel de sıyır beyazı. (NFK)