DBGridDrawColumnCell ile satır renklendirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

DBGridDrawColumnCell ile satır renklendirme

Mesaj gönderen conari »

Arkadaşlar Öncelikle hepinizin geçmiş kurban bayramını ve yeni yılını kutlarım. Gridimde fields [0] alanına göre renk vereceğim tüm satırlara fakat bir türlü karşılaştıramadım. Registry veya ini dosyası oluşturmak istemiyorum.
JediDbgrid kullanıyorum.

Kod: Tümünü seç

procedure TSform.ALLsipDBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
  var ilk,son:string;
begin
    ilk :=   ALLsipDBGrid.Fields[0].Value;
          if ilk <>son
    then begin ALLsipDBGrid.Color:= clRed;
           end
    else begin ALLsipDBGrid.Color:= clgreen;
           son :=ALLsipDBGrid.Fields[0].Value;
end;
end;
Numara
1 satır renk Kırmızı
1 satır renk Kırmızı
2 satır renk Yeşil
2 satır renk Yeşil
3 satır renk Kırmızı
4 satır renk Yeşil
5 satır renk Kırmızı
Şeklinde gitmesini istiyorum.
Bu kodda hatalı biliyorum ama böle bişeyi rege ve ini ye yazmadan nasıl yapabiliriz. Teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
fatihtolgaata
Üye
Mesajlar: 382
Kayıt: 04 Mar 2004 09:46
Konum: K.çekmece / İstanbul
İletişim:

Mesaj gönderen fatihtolgaata »

State'i kontrol ettir. Eğer focused ya da selected değilse Rect sabitini kullanarak Canvas.Fill(Rect) ile boyattır. Mesela:

Kod: Tümünü seç

ALLsipDBGrid.Canvas.Brush.Color := clRed;
ALLsipDBGrid.Canvas.Fill(Rect);
gibi...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Teşekkür Lakin istediğim bu değil. bu işlem Seçim de tıklanan alanın canvas ini değiştiriyor.onu bu kod ile yapıyorum.

Kod: Tümünü seç

if (TStringGrid(ALLsipDBGrid).Row mod 2) =0
then ALLsipDBGrid.Canvas.Brush.Color := clGreen
else ALLsipDBGrid.Canvas.Brush.Color := clRed;
Benim istediğim Field daki değer değişiminde Kırmızı ve Yeşil olması.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
direk tablonun alanını kontrol ederek yapabilmen lazım.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb;

Kod: Tümünü seç

procedure TSform.ALLsipDBGridDrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if ALLsipDBGrid.Fields[0].AsInteger mod 2=1 then
    ALLsipDBGrid.Canvas.Brush.Color := clRed
  else ALLsipDBGrid.Canvas.Brush.Color := clGreen;
  DBGrid.DefaultDrawColumnCell(Sender,Rect,DataCol,Column,State);
end;
şeklinde boyama işlemi yapabilirsin ama bu bir satır yeşil bir satır kırmızı olmaz ALLsipDBGrid.Fields[0] da bulunan değer tek ise kırmızı çift ise yeşil olur. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

@Aslan Hocam bu konu ile ilgili biraz daha detaylı bilgi verebilirmisin.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

@Saban hoca saol lakin Fields[0].value string de olabilir.
:lol: :oops:
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

[Error] Siparis.pas(1143): Incompatible types: 'TRect' and 'TObject'
[Error] Siparis.pas(1143): Incompatible types: 'TColumn' and 'Integer'

bu satır için aldım bu hataları
ALLsipDBGrid.DefaultDrawColumnCell(Sender,Rect,DataCol,Column,State);
end;
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Mrb; sender parametresini sil ve şu hale getir DBGrid.DefaultDrawColumnCell(Rect,DataCol,Column,State);. Acele ile test etmeden cevap yazınca böyle oldu. Fields[0].value değerine göre renklendirme işlemi yapmak istiyorsan o zaman ortaya çıkan renkler gridin gösterdiği tablonun gridde gösterdiği ilk alanın değerlerine göre renklendirilecektir. Örneğime göre ilk alanda görünen değer tek ise kırmızı çift ise yeşil görünecektir. Tüm kayıtlarda o alan değeri tek ise kıpkırmızı bir gridin olacaktır. Değerin string de olabileceğini söylüyorsun. O halde sen bu örnekten yola çıkarak kodları kendi istediğin şekilde uygunlaştırabilirsin. Kolay gelsin.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

Alanın İnteger olduğunu varsayarsak çalışıyor.

yalnız; İşlem öncesinde count için > 0 kontrolü yapılmalı.

Hoca Teşekkürler.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Cevapla