dbgridde sadece belirli alanları renklendirmek

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ayseonat
Üye
Mesajlar: 58
Kayıt: 17 Ara 2004 12:18
Konum: Konya

dbgridde sadece belirli alanları renklendirmek

Mesaj gönderen ayseonat »

Merhaba arkadaşlar.
delphi ve access kullanarak yapmış olduğum bi projem var. bu projede bazı süzme işlemleri gerçekleştirdikten sonra dbgirdde istediğim alanlar listeleniyor.
veritabanımda 0,8 lik yüzdelik dilim isimli bi alanım var. ve burada 0-100 arasında rakamlar girilmiş.
mesela ilk başta bi editten sayı giriyorum. o sayının -5 eksiği ve +5 fazlası arasındaki rakamları listeletiyorum. ama dbgirdde bu alanların arası renkli olması lazım. mesela editten girdiğim sayi 11 olsun;
11-5=6 / 11+5=16
0-6 arası mavi
6-16 arası kirmizi
16-100 arası da sarı renk olacak.
fakat ben bunu yapamadım . bu konuda yardımcı olursanız sevinirim
herkese ii çalışmalar.
Kullanıcı avatarı
sTb
Üye
Mesajlar: 59
Kayıt: 06 Nis 2005 11:13
Konum: Eskişehir

Mesaj gönderen sTb »

Umarım işine yarar

gridin Dbgrid1drawcolumncell olayına;

Kod: Tümünü seç

if (column.fieldname='yuzdelik') then begin //datanda nasılsa
if (column.field.asinteger>0) and (column.field.asinteger<6) then dbgrid1.canvas.brush.color:=clblue;
if (column.field.asinteger>6) and (column.field.asinteger<16) then dbgrid1.canvas.brush.color:=clred;
if (column.field.asinteger>16) and (column.field.asinteger<100) then dbgrid1.canvas.brush.color:=clyellow;
dbgrid1.defaultdrawcolumncell(rect,datacol,column,state);
end;
Saygılarımla
" Her bildiğin doğru olsun. Ama her doğruyu her yerde söylemek doğru değildir. "
ayseonat
Üye
Mesajlar: 58
Kayıt: 17 Ara 2004 12:18
Konum: Konya

Mesaj gönderen ayseonat »

Merhaba ben bunu aşağıdaki gibi denedim. ama bu döngüye hiç girmiyor. f7 yle kontrol ettim. ama olmadı. başka yapma yöntemi varmı?

Kod: Tümünü seç

if (Column.FieldName='Alan') then
begin
if ((column.field.asfloat)>(0)) and ((column.field.asfloat)<(strtofloat(soz08.Text)-5)) then
   dbgrid1.canvas.brush.color:=clblue;
if ((column.field.asfloat)>(strtofloat(soz08.Text)-5)) and ((column.field.asfloat)<(strtofloat(soz08.Text)+5)) then
   dbgrid1.canvas.brush.color:=clred;
if ((column.field.asfloat)>(strtofloat(soz08.Text)+5)) and ((column.field.asfloat)<100) then
   dbgrid1.canvas.brush.color:=clyellow;
dbgrid1.defaultdrawcolumncell(rect,datacol,column,state);
end;
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Kod: Tümünü seç

procedure TForm8.grid1DrawColumnCell(Sender: TObject; const Rect: TRect;
  DataCol: Integer; Column: TColumn; State: TGridDrawState);
  var
  durum,durum2:string;
begin
durum2:=grid1.DataSource.DataSet.fieldbyname('DURUM').AsString;
durum:=grid1.DataSource.DataSet.fieldbyname('MCEKTARIH').AsString;
if durum=datetostr(date) then
if (gdfocused in state) then
grid1.Canvas.Brush.Color:=clbtnface
else
grid1.Canvas.Brush.Color:=clred;
grid1.DefaultDrawColumnCell(rect,datacol,column,state);
if durum2='TAHSİL EDİLDİ' then
if (gdfocused in state) then
grid1.Canvas.Brush.Color:=clbtnface
else
grid1.Canvas.Brush.Color:=clgreen;
grid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
Bu şekilde hiç sorun yaşanmıyor..bunu deneyin
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ayseonat
Üye
Mesajlar: 58
Kayıt: 17 Ara 2004 12:18
Konum: Konya

Mesaj gönderen ayseonat »

arkadaşlar bi önceki kodla hallettim işimi. :lol: . bi yerde küçük bi hata yapmışım. düzeldi şimdi. ama sadece "Alan" isimli alanım renkli oluyor. ben istiyorumki tüm satır renklensin. onu nasıl yapabilirim? yani dbgridin hangi özelliğini değiştirmem gerekiyor?
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

kodda sadece alanı kontrol ediyorsunuz ondan kaynaklanıyor olabilir..ama verdiğim koda göre uyarlayın yani tüm satırı bir alana göre kontrol edip renklendirebilirsiniz.
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ayseonat
Üye
Mesajlar: 58
Kayıt: 17 Ara 2004 12:18
Konum: Konya

Mesaj gönderen ayseonat »

merhaba arkadaşlar
vedat bey dediğiniz kodu uyguladım ve oldu :lol: :lol: :lol: :lol:
yardımlarınız için hem size hemde sTb ye çok teşekkür ederim.
herkese iyi çalışmalar
Kullanıcı avatarı
vedatkaba
Kıdemli Üye
Mesajlar: 866
Kayıt: 06 Oca 2004 06:50
Konum: DARICA/GEBZE

Mesaj gönderen vedatkaba »

Ne demek faydalı olabildiysek ne mutlu bize ama sorunsuz kod biçiminide yazmış olsaydınız forum gerçek amacına ulaşırdı.

kolay gelsin...........
***********************************
Kamil odur ki; koya dünyada bir eser,
Eseri olmayanın, yerinde yeller eser.

***********************************
ayseonat
Üye
Mesajlar: 58
Kayıt: 17 Ara 2004 12:18
Konum: Konya

Mesaj gönderen ayseonat »

Merhaba hatırlattığınız çok ii oldu. ben unutmuşum yazmayı :oops: . hatırlattığınız için teşekkür ederim.
>benim alan adı altında nümerikyüzdelik değerlerim var. ekrandan girilen değerlere göre grid alanları boyancak.
>ypuantürü de boyanmasını istediğim alanlar. ypuantürü="söz" olduğu durumlarda alanlar boyancak.

Kod: Tümünü seç

var
  durum2:double;
  durum:string;
begin
durum2:=dbgrid1.DataSource.DataSet.fieldbyname('Alan').Asfloat;
durum:=dbgrid1.DataSource.DataSet.fieldbyname('ypuanturu').AsString;

if durum='söz' then
begin
if ((durum2)>(0)) and ((durum2)<(strtofloat(soz08.Text)-1)) then
if (gdfocused in state) then
dbgrid1.Canvas.Brush.Color:=clbtnface
else
dbgrid1.Canvas.Brush.Color:=$00FFFDFF;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);

if ((durum2)>(strtofloat(soz08.Text)-1)) and ((durum2)<(strtofloat(soz08.Text)+1)) then
if (gdfocused in state) then
dbgrid1.Canvas.Brush.Color:=clbtnface
else
dbgrid1.Canvas.Brush.Color:=$00FDFBFF;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);

if ((durum2)>(strtofloat(soz08.Text)+1)) and ((durum2)<(100)) then
if (gdfocused in state) then
dbgrid1.Canvas.Brush.Color:=clbtnface
else
dbgrid1.Canvas.Brush.Color:=$00F5ECFF;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
herkese tekrardan ii çalışmalar.
Cevapla