şartlı renklendirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
alakel
Üye
Mesajlar: 45
Kayıt: 03 Nis 2007 02:42

şartlı renklendirme

Mesaj gönderen alakel »

s.a. herkese iyi çalışmalar. sitede araştırdım ama yapmak istediğimi bulamadım.

TARİH SAAT DERS GÖREVLİ1 GÖREVLİ2 GÖREVLİ3
10.04.2009 10:00 DERS1 AYŞE MUSA ALİ
10.04.2009 10:00 DERS2 ALİ AHMET MEHMET
10:04.2009 13:00 DERS3 ÖKKEŞ OSMAN ÖMER
10.04.2009 13:00 DERS4 OSMAN KEMAL AYŞE
11.04.2009 10:00 DERS5 MUSTAFA AHMET HAKAN
11.04.2009 10:00 DERS6 HAKAN ÖMER FATMA

cxgrid kullanıyorum ve veri tabanı yapısı yukarıdaki gibi. burada yapmak istediğim aynı tarih ve saatte aynı görevliye ikinci bir görev verildiğinde hücrenin renklenmesi (örneğin kırmızı). satır bazında aynı görevliye ikinci bir görev verildiğinde hücreyi renklendirebiliyorum. örneğin aynı tarih ve saatte birden fazla ders olabiliyor. tarih 10.04.2009 saat 10:00 da yapılan görevlendirmelerde aynı görevliye ikinci veya 3 ... görevlendirme yapıldığında hücrenin renklenmesini istiyorum.

yukarıdaki tabloya göre 10.04.2009 saat 10:00 da ders1 ve ders2 de ALİ isimli görevliye 2 defa görev verilmiş. ALİ yazan hücrelerin renklenmesini istiyorum. aynı şekilde 10.04.2009 saat 13:00 da OSMAN isimli görevli, 11.04.2009 saat 10:00 da HAKAN isimli görevli gibi. yardımcı olursanız çok sevinirim.
Kullanıcı avatarı
KoPilot
Üye
Mesajlar: 185
Kayıt: 05 Eki 2007 08:02

Re: şartlı renklendirme

Mesaj gönderen KoPilot »

cxgrid için nasıldır bilmiyorum ama normal dbgrid için sana bir yol vereyim buradan çıkarabilirsin sanırım. Yapman gereken if bloğu içine "and" ile birleştirerek alanları vermen...

Kod: Tümünü seç

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
  if DBGrid1.Fields[4].asstring <> 'K' then
  begin
    DBGrid1.Canvas.Brush.Color := clRed;
    dbGrid1.Canvas.Font.Color := clYellow; // Fontun rengini değiştirir..
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end
  else if DBGrid1.Fields[7].asstring = '0.00' then
  begin
    DBGrid1.Canvas.Brush.Color := clYellow;
    dbGrid1.Canvas.Font.Color := ClBlack; // Fontun rengini değiştirir..
    DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
  end
// else if DBGrid1.Fields[17].asstring ='998' then
// begin
// DBGrid1.Canvas.Brush.Color := clgreen;
// dbGrid1.Canvas.Font.Color:=ClBlack; // Fontun rengini değiştirir..
// DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
// end
  else if (gdSelected in state) then // eğer seçili ise
  begin
    DBGrid1.Canvas.Brush.Color := $00A00000; // zemin rengi Lacivert= $00A00000
     DbGrid1.Canvas.Font.Color := clYellow; // font rengi
   end
  else if (dbgrid1.datasource.dataset.recno mod 2) = 0 then
    DBGrid1.Canvas.Brush.Color := $00C8FBFD // Krem rengine yakın= $00C8FBFD
  else
    DBGrid1.Canvas.Brush.Color := $00BFD7B5;  // Açık yeşil gibi= $00BFD7B5
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;
Birkaç alan için dbgridin satırlarının renklendirilmesi var burada istersen diğer şartların içinde dbgridin satırlarını renklendirebilirsin...
Dosyalarınızı kendi bulutunuza yedekleyin. Yandex Disk
Eyvallah..
alakel
Üye
Mesajlar: 45
Kayıt: 03 Nis 2007 02:42

Re: şartlı renklendirme

Mesaj gönderen alakel »

hocam teşekkür ederim ama bunun işime yarayacağını sanmıyorum
emin_as
Üye
Mesajlar: 559
Kayıt: 01 Eki 2008 10:05
Konum: izmir
İletişim:

Re: şartlı renklendirme

Mesaj gönderen emin_as »

OnGetContentStyle eventi işini görür. Kullandıgın cxGrid de ait view nun eventi bu.

Aşagıdaki kodda DURUM adlı integer field da göre düzenlemeyi gösterdim. Sen kendi fieldlarına göre ayarlamayı yaparsın. Ayrıca cxStyleRepository ile istedigin stilleri oluşturabilirsin.

Kod: Tümünü seç

procedure TEmlakForm.DBCardView2StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
  with DBCardView2.DataController do
    if Arecord.Values[GetItemByFieldName('DURUM').Index] = 1  then
      Astyle:=cxStyle2
    else
      Astyle:=cxStyle9;
end;
Cevapla