1

Konu: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Sevgili Arkadaşlar,
Sırf gridi öğrenmek için ufak bir program yapmaya çalışıyorum ama iki konuda başarılı olamıyorum:
Birinci konuda borç isimli bir field içeren bir database var. İstediğim şo: Borç >0 sa o satır kırmızı, borç<0 sa yeşil, borç=0 sa mavi görüntülensin.
Ben bunu çeşitli şekillerde denedim ama birtürlü başaramadım. Ne gridin initine ne de formun initine yazdığım programlar çalışmıyor.
İkinci konu da şu: Gridin initine, dblclic ine veye click ine yazdığım hiç bir program çalışmıyor.
Gridde notlar isimli bir memo field var. Hangi satır aktif ise o satırdaki notlar fieldini edit etmek istiyorum. Ama ne yaptıysam çalışmıyor. Gridin formuna bir cmdbutton ekleyip click ine aşağıdaki ufak programı yazınca

Visual Fox Pro
SET MEMOWIDTH TO 60

MODIFY MEMO notlar


istediğim oluyor.
Lütfen Yardımlarınızı esirgemeyiniz.
Yardımcı olacak arkadaşlara şimdiden çok teşekkür ederim.
Sevgilerimle.
Erdal

2

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

thisform.grid.SetAll("dynamicforecolor", "IIF(borc>0, RGB(0,0,255), RGB(0,0,0))")
burda   borc>0 ise RGB(0,0,255)    degilse  RGB(0,0,0)   bunu yapar

DynamicBackColor, DynamicForeColor ı ben kullanıyorum

http://msdn.microsoft.com/en-us/library … S.80).aspx  burada biraz var

kolay gelsin

3

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Sevgili Konuralp,
Çok teşekkür ederim. Sorunum çözüldü.
Sevgilerimle.
Erdal

4

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

peki biz bunu borç durumu değilde bir kayıt mavi bir kayıt beyaz görünsün istersek nasıl yapıcaz.

5

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Aşağıdaki linklerde konu geçmişti sanırım.

http://www.fox4um.com/topic/677/grid-de … recordlar/
http://www.fox4um.com/topic/263/grid-de … lor-rengi/
http://www.fox4um.com/topic/611/gridi-renklendirme/

6

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

ben şöyle bir yönten denedim bu daha hoşuma gitti

grid afterrowcolchange

Visual Fox Pro
mrec=recno("personel")

this.refresh
thisform.refresh

grid initine

Visual Fox Pro
public mrec

mrec=recno("personel")
this.setall("dynamicbackcolor",'iif(recno("personel")=mrec,rgb(145,45,10),rgb(217,165,155))',"column")
this.setall("dynamicbackcolor",'iif(recno("personel")=mrec,rgb(217,165,155),rgb(145,45,10))',"column")

7

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Nedense hep en kotu yontemler yeni baslayanlarin en cok hosuna giden yontemler oluyor (ben dahil hepimiz icin gecerli sanirim).  Ne yazik ki en kolayi da bu en kotu yontemler smile

Tavsiye: "Public" kullanma ve varligini unut. Yoksa millet aptal degil oyle basit degisken kullanmak varken property yaratmakla ugrasiyor.
(kural degil, tavsiye. Acilarini biz zamaninda cektik sen bastan uzak dur. Ne zamanki ne yaptigini son derece iyi bilecek hale gbeleceksin, o zaman istersen gene kullanirsin)

8

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Merhaba,

Herkese iyi yıllar.

Benim de grid'de renklendirme ile ilgili bir sorum olacak. Yedi kolonu olan bir grid'in ilk kolonundaki (karakter, nümerik değil) değerleri birbirleriyle aynı olan kayıtların aynı renkte olmasını istiyorum. Kimi zaman sadece bir kayıt kimi zaman da 6-7 kayıt aynı değer olabiliyor.

Yardımlarınız için sağolun, şimdiden.

9

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Daha once orneklerini gondermistim. Iki ornek:

Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show
 
 
Define Class myForm As Form
  DataSession = 2
  Height=400
  Width=400
 
  Add Object myGrid As Grid With ;
  RecordSource='Customer',  Height=400,  Width=400,anchor=15
 
  Procedure Load
    This.AddProperty('arrCountries[1]')
    This.AddProperty('arrColors[1]')
 
    Select Distinct country ;
      FROM (_samples+'data\customer') ;
      INTO Array this.arrCountries
    Dimension This.arrColors[ALEN(this.arrCountries)]
 
    SELECT Customer
    locate
    For ix=1 To Alen(this.arrCountries)
      This.arrColors[m.ix] = INT( 0xC0C0C0 / m.ix ) + 0xA0
    Endfor
  Endproc
 
  Procedure Init
    This.myGrid.SetAll('DynamicBackColor', ;
      'thisform.arrColors[ASCAN(thisform.arrCountries,Customer.Country,1,-1,1,1+2+4+8)]')
  Endproc
Enddefine

Ikincisi benim asil tercihim (renk secme isini bir fonksiyona yukluyor):

Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show
 
Define Class myForm As Form
  DataSession = 2
  Height=200
  Width=400
 
  Add Object myGrid As Grid With ;
    Height=200,  Width=400,Anchor=15,  RecordSource='crsOrders'
 
  Procedure Load
    Select * From (_samples+'data\Orders') Into Cursor crsOrders nofilter
    Use In 'Orders'
  Endproc
 
  Procedure Init
    This.myGrid.SetAll('DynamicBackColor', '(thisform.ColorByEmployee(crsOrders.Emp_ID))')
  Endproc
 
  Procedure ColorByEmployee(tcEmp_ID)
    Do Case
      Case Val(m.tcEmp_ID)=1
        Return 0xFFFF00
      Case Val(m.tcEmp_ID)=2
        Return 0xFF00FF
      Case Val(m.tcEmp_ID)=3
        Return 0x00FFFF
      Case Val(m.tcEmp_ID)=4
        Return 0xFF8000
      Case Val(m.tcEmp_ID)=5
        Return 0xFF0080
      Case Val(m.tcEmp_ID)=6
        Return 0x80FF00
      Case Val(m.tcEmp_ID)=7
        Return 0x00FF80
      Case Val(m.tcEmp_ID)=8
        Return 0x0080FF
      Case Val(m.tcEmp_ID)=9
        Return 0x8000FF
      Otherwise
        Return 0x808080
    Endcase
  Endproc
Enddefine

10

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Üstat, tek kelime ile harikasın. Her zamanki gibi smile

Ellerine sağlık ...

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ü

11 Son düzenleyen, cetinbasoz (03.01.2011 11:31:15)

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

smile Bu arada aklima daha basit bir yol geldi:

Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show
 
Define Class myForm As Form
  DataSession = 2
  Height=400
  Width=400
 
  Add Object myGrid As Grid With ;
  RecordSource='Orders',  Height=400,  Width=400,anchor=15, readonly=.T.
 
  Procedure Load
    USE (_samples+'data\orders')
  Endproc
 
  Procedure Init
    This.myGrid.SetAll('DynamicBackColor', 'val(sys(2007,Orders.emp_id,1,1))')
  Endproc
Enddefine

12

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Visual Fox Pro
This.myGrid.SetAll('DynamicBackColor', 'val(sys(2007,Orders.emp_id,1,1))')

Üstat daha zorlama ben iyice kafayı yiycem.

Kodun hepsi 1 satıra indi!!!! 

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ü

13

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Eline Sağlık.

Bilmediğin Neyse Yanıldığındır.

14

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Çetin,

Gerçekten mükemmel bir çözüm. Hem de işi bitiren kod, tek satırlık.

Visual Fox Pro
This.myGrid.SetAll('DynamicBackColor', 'val(sys(2007,Orders.emp_id,1,1))')

İnsan beynine (özelinde Çetin'inkine) saygı duymamak mümkün değil.

Benim için yeni yıl hediyesi gibi oldu.

Çok teşekkür ederim.

15

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Hemen bir istek daha (ayıp oluyor belki ama).
Kimi satırlarda forecolor da benzer tonda olduğu için okunmakta zorluk çekiliyor.
Zemin rengine göre yine dinamik olarak forecolor'ın da değişmesini istesem (zemin koyu ise açık ya da tersi) çok şey mi istemiş olurum. neutral

BITNOT gibi fonksiyonları denedim olmadı.

teşekkürler...

16 Son düzenleyen, konuka (04.01.2011 11:58:17)

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

kandilzade: Grid.Column propertilerinde ve Help'de hepsi var: DynamicForeColor, DynamicFontbold, DynamicCurrentControl, ... aşağıda çeşitlemeler

Çetin'in koduna bir doğaçlama yaptım:

Visual Fox Pro
Procedure Init

*    This.myGrid.SetAll('DynamicBackColor', 'val(sys(2007,Orders.emp_id,1,1))')
    This.myGrid.SetAll('DynamicBackColor', 'INT(RAND()*10000000)' )
    This.myGrid.SetAll('DynamicForeColor', 'INT(RAND()*10000000)' )
    This.myGrid.SetAll('DynamicFontBold' , 'INT(RAND()*10000000)%2=0' )
    This.myGrid.SetAll('DynamicFontUnderline' , 'INT(RAND()*10000000)%3=0' )
    This.myGrid.SetAll('DynamicFontStrikeThru' , 'INT(RAND()*10000000)%4=0' )


1. Her hücre değişik renk ve özellik alıyor. Her tekrar tıkladığında (herhalde refreh olunca) renkler ve diğerleri yenileniyor)
2. RAND()*1000000 sayısı büyüdükçe renkler çeşitleniyor
3. Setall ('DynamicBackColor', 'IIF()' , 'Column') 'Column' kullanıp kullanmamak arasında sonuçlarda fark bulamadım -  yorum yapabilirmisin ??

VFP9 SP2

17

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

'Column' ben kullanmiyorum. Nasil olsa benim gridimde tum kolonlar 'Column' classindan ve sadece kolonlarin DynamicBackColor propertysi var, yazip yazmamak ayni sey. O son parametre belli bir class elemanlarina uygulamak istediginde gecerli. Ornegin:

Visual Fox Pro
thisform.SetAll( 'Enabled', .F., 'Textbox' )

formda sadece base textbox classindan olan nesneleri etkisiz hale getir.

Visual Fox Pro
thisform.SetAll( 'Enabled', .F., 'MyTextbox' )

formda sadece MyTextbox classindan olan nesneleri etkisiz hale getir.

Visual Fox Pro
thisform.SetAll( 'Enabled', .F.)


formda Enabled property'sine sahip ne bulursan onlari etkisiz hale getir.

Seninki rand() ile animasyon olmus:) Dynamic* her refreshte ve sadece ve sadece (VFP'ye tesekkurler) gorunen hucreler icin cagiriliyor.


Burada arka/on alan kontrasti icin bir degisik sekli:

Visual Fox Pro
Public oForm

oForm = Createobject('myForm')
oForm.Show
 
Define Class myForm As Form
  DataSession = 2
  Height=400
  Width=400
 
  Add Object myGrid As Grid With ;
    RecordSource='Orders',  Height=400,  Width=400,Anchor=15, ReadOnly=.T.
 
  Procedure Load
    Use (_samples+'data\orders')
  Endproc
 
  Procedure Init
    This.myGrid.SetAll('DynamicBackColor', '(thisform.ColorMe(Orders.Emp_id, .F.))')
    This.myGrid.SetAll('DynamicForeColor', '(thisform.ColorMe(Orders.Emp_id, .T.))')
  Endproc
 
  Procedure ColorMe(tcValue, tlForeColor)
    Local lnBackColor, lnForeColor
    lnBackColor = Bitand( Val(Sys(2007,m.tcValue,1,1)), 0x00FFFFFF )
    If !m.tlForeColor
      Return m.lnBackColor
    Endif
 
    Local lnRed, lnGreen, lnBlue,lnAlpha
    lnRed = Bitand(Bitrshift(m.lnBackColor,0),0xFF)
    lnGreen = Bitand(Bitrshift(m.lnBackColor,8),0xFF)
    lnBlue = Bitand(Bitrshift(m.lnBackColor,16),0xFF)
    lnAlpha = (Max(m.lnRed,m.lnGreen,m.lnBlue)+Min(m.lnRed,m.lnGreen,m.lnBlue))/2
 
    Return Iif(m.lnAlpha < 0x80, 0xFFFFFF, 0)
  Endproc
Enddefine

18

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Yardımlarınız ve fikirleriniz için çok teşekkürler. Sonuç mükemmel oldu.
Beyninize sağlık...

19 Son düzenleyen, ugurlu2001 (05.01.2011 09:43:07)

Re: Grid satırlarını renklendirmek ve grid initini çalıştırmak

Üstat, dün RGB olayına giriyim deyip bulaştırmıştım iyice. Çıkamamıştım işin içinde. Aşağıdaki fonksiyonları yazdım ama ne çare demiştim.

Senin elin deince arklı bir güzelleşmiş. Her zaman olduğu gibi smile

Kime ne kadar yarar bilmiyorum ama biriin işine yararsa buyursun  ... smile

Visual Fox Pro
FUNCTION ColorReverse

    LPARAMETERS  tnColor
    LOCAL lnMaxValue
    RETURN GetRGB(16777215 - tnColor)
ENDFUNC
 
 
* ? GetRGB(15422450)
FUNCTION GetRGB
    PARAMETERS tnRGBValue
    RETURN('RGB('+;
                ALLTRIM(STR(INT(MOD(tnRGBValue,256))))+','+;
                ALLTRIM(STR(INT(MOD(tnRGBValue/256,256))))+','+;
                ALLTRIM(STR(INT(MOD(tnRGBValue/(256*256),256))))+')')
ENDFUNC
 
* ? GetRGBVal("RGB(255,0,255)")
FUNCTION GetRGBVal
    PARAMETERS tcRGB
 
    Return(    INT(VAL(SUBSTR(m.tcRGB,5,ATC(',',m.tcRGB)-5))+ ;
                VAL(SUBSTR(m.tcRGB,ATC(',',m.tcRGB)+1,(RAT(',',m.tcRGB,1) - AT(',',m.tcRGB)-1)))*256 + ;
                VAL(SUBSTR(m.tcRGB, RAT(',',m.tcRGB,1)+1, LEN(m.tcRGB) -RAT(',',m.tcRGB,1) - 1))*256*256 ))
ENDFUNC

Senin kodlardaki BitAnd ve BitShift e biraz çalışmak lazım anlaşılan...

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ü