Quantum Grid Boyama...

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
sevketmehmet
Üye
Mesajlar: 6
Kayıt: 02 Şub 2004 11:42

Quantum Grid Boyama...

Mesaj gönderen sevketmehmet »

Arkadaşlar DevExpress in cxGridinde satır boyama işiyle uğraşan oldumu hiç. kolondaki bi değer e göre satır yada kolonu renklendirmem lazım. Örneklerde çok fazla detaya girilmiş ortalık karışmış... Böyle bir örneği olan varsa buraya yazabilirse çok sevinirim.
Iyi calismalar.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Eğer dxDBGrid ise sorduğunuz aşağıdaki gibi renklendirebilirsiniz.


Aşağıdaki kodda, ODM_VADE ve ODM_DURUM fieldları kontrol edilerek, ODM_VADE'nin günün tarihi ile arasındaki farklara göre gridi satır satır renklendiriyor.

Kod: Tümünü seç

procedure TfrmOdemeListesi.dxgOdemeCustomDraw(Sender: TObject;
  ACanvas: TCanvas; ARect: TRect; ANode: TdxTreeListNode;
  AColumn: TdxDBTreeListColumn; const AText: String; AFont: TFont;
  var AColor: TColor; ASelected, AFocused: Boolean; var ADone: Boolean);
Var
  dblTarih, dblBugun : Double ;
  intFark : Integer ;
begin
  If ANode.Count = 0 Then
  Begin
    dblBugun := Date ;
    If Not ASelected Then
    Begin
      If ANode.Values[dxgOdeme.ColumnByFieldName('ODM_DURUM').Index] = 0 Then
      Begin
        dblTarih := ANode.Values[dxgOdeme.ColumnByFieldName('ODM_VADE').Index] ;
        intFark := Trunc(dblTarih - dblBugun) ;
        If intFark < 0 Then
          AColor := clODEME_TARIHI_GECTI
        Else If intFark = 0 Then
          AColor := clODEME_TARIHI_BUGUN
        Else If intFark <= 5 Then
          AColor := clODEME_TARIHI_GELMEDI_5
        Else
          AColor := clODEME_TARIHI_GELMEDI_10 ;
      End
      Else
        AColor := clODEME_TAMAM ;
    End ;
  End ;
end;


Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Bu arada OnCustomDraw Event'ine yazacaksınız :) Gerçi koddan okunabiliyor ama ben yinede gözden kaçabilir diye ekleyeyim dedim.

Tekrar Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

Ben de Quantum Grid 4 için yazayım.

Cell için : Önce cxStyleRepository ile bir style oluşturuyorsun. Renk ve fontunu ayarlıyorsun. Daha sonra aşağıdaki kodu OnGetContentStyle olayına yazıyorsun :

Kod: Tümünü seç

if ARecord.Values[AItem.Index] = 5 then
    AStyle := stlTicketPrice;
Satır(Row) için : Yine style oluşturup, ayarla. Yine OnGetContentStyle olayına aşağıdaki kodu yaz :

Kod: Tümünü seç

var
  AColumn: TcxCustomGridTableItem;
begin
  AColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Email');
  if VarToStr(ARecord.Values[AColumn.Index]) = '' then
    AStyle := cxStyleNullEmail;
Kolay gelsin.
sevketmehmet
Üye
Mesajlar: 6
Kayıt: 02 Şub 2004 11:42

Mesaj gönderen sevketmehmet »

Tesekkurler arkadaslar. Bi yapalim bakalim.
Herkese kolay gelsin...
akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

Hücre Boyama

Mesaj gönderen akkaya83 »

Hücre boyama nasıl yapılıyor arkadaşlar bir el atsanız. Eski versionunda vardı ama şöyleydi

Kod: Tümünü seç

 if not ASelected and (AColumn = HizirDBGridKurumPersonelilkpUnvani) then
  begin
    Value := ANode.Values[AColumn.Index];
    if not VarIsNull(Value) then
    begin

      dmPersonel.tbUnvan.Locate('Unvan',dmpersonel.tbPersonellkpUnvani.Value,[]);
      if Value = dmpersonel.tbPersonellkpUnvani.Value then AColor := StringToColor(dmpersonel.tbUnvanRenk.Value);
AColor diye bir olgu bulamadım yenide. Nasıl ulaşırım o parametreye
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

hata

Mesaj gönderen berken »

merhaba arkadaslar..
mustafa hocanın dediği gibi
asagıdakı kodları yazdım

Kod: Tümünü seç

procedure Tuyeler.cxGrid1DBTableView1StylesGetContentStyle(
  Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
  AItem: TcxCustomGridTableItem;  out AStyle: TcxStyle );
var
  AColumn: TcxCustomGridTableItem;
begin
  AColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('adi');
  if VarToStr(ARecord.Values[AColumn.Index]) = '' then
    AStyle := cxStyle1;
end;
ancak

Kod: Tümünü seç

  if VarToStr(ARecord.Values[AColumn.Index]) = '' then
satırın da Acces Validation at adres 00580960 in module 'Project1.exe' hatası verdi. .program calışmadı sonra..
sebebi ne olabilir..
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
satır satır çalıştırarak hatanın tam yerini ve nedenini bulabilirsin.
hata oluşan satıra breakpoint koy.(o satıra gelip f5 e bas satır renklenecek) programı çalıştır. o satıra gelince program duracaktır. o anda değişkenlerin üzerine gelererk değerlerini görebilirsin. değerlerde bi terslik varmı bak.
tahminime göre cxstyle1 ile ilgili bişey. ama burdan bunu öğrenmek biraz zor.
dediğim gibi yapıp değişkenlerde veya nesnelerde olması gerekenden başka bir değeri olan varmı kontrol et.

kodu şu şekilde değiştirebilirmisiniz. Hatanın nerede olduğunu tam net öğrenmeniz için.

Kod: Tümünü seç

 if VarToStr(ARecord.Values[AColumn.Index]) = '' then
begin
AStyle := cxStyle1;
end;
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

sorun devam ediyor

Mesaj gönderen berken »

iyi çalışmalar hocam
... programı satır satır calıştırdım ...
...daha net görebilmek için

Kod: Tümünü seç

var
  AColumn: TcxCustomGridTableItem;
  a : string;
begin
  AColumn := (Sender as TcxGridDBTableView).GetColumnByFieldName('Adi');
  a:= VarToStr(ARecord.Values[AColumn.Index]);
  if a = '' then
    AStyle := cxStyle1;
şeklinde yazdım..
adım adım takip ettiğimde a '', aRecord nil, aColumn ilk satırda csingeritable değerlerini alıyor.. a:= VarToStr(ARecord.Values[AColumn.Index]); satırında aynı şekilde yukarıda bahsettiğim satırda hata veriyor..
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

a

Mesaj gönderen berken »

derdimi yine tam olarak anlatayım..
aslında çok basıt.. cxgrid de listelediğim tabloda durum diye boolean bir field ım var.. field ın true ya da false olmasına bağlı stylereposty ile oluşturduğum style1 veya style 2 olsun... herhalde sorunum durum fieldını value sini oğrenmek..
saygılarımla..
Kullanıcı avatarı
spiderman
Üye
Mesajlar: 70
Kayıt: 02 Ara 2005 03:17

Mesaj gönderen spiderman »

Asagidaki ornekte MesajlarDBTableView1Column8 datetime turunde degisken ve onun null olup olmamasi kontrolu var, MesajlarDBTableView1Column8.Index ile degeri okuyorum cunki kullanici coloum'un yerini degistirebilir diye


procedure TOSInternalMesajGoster.MesajlarDBTableView1StylesGetContentStyle(
Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord;
AItem: TcxCustomGridTableItem; out AStyle: TcxStyle);
begin
if ARecord is TcxGridDataRow then
begin
if ARecord.Values[MesajlarDBTableView1Column8.Index]=Null then
AStyle:=Menuz.OSUnRead;
end;
end;
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

kusura bakmayın arkadaslar CustomDraw eventını bulamadam
CustomDrawCell var.. kuri Yj ye cevaben..
saygılarımla
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

OnCustomDrawCell eventine şöyle bir kod yazın:

Kod: Tümünü seç

  try
    if AViewInfo.Item.Index = 5 then //Durum
      if VarToStr(AViewInfo.GridRecord.Values[5]) = 'True' then
        ACanvas.Brush.Color := clRed
      else
        ACanvas.Brush.Color := clYellow;
  except
    // Ne olur ne olmaz.
  end;
İyi çalışmalar.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Express Quantum Grid 3.2.2'de var, yani 3'lü versiyonlarda var ama 4 ve 5'de değiştirildi o kısımlar. Orada renklendirme daha farklı yapılıyor. Onlarda Style'lar ile yapabilirsiniz.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
berken
Üye
Mesajlar: 208
Kayıt: 07 Ara 2005 04:27
Konum: Van

Mesaj gönderen berken »

tamam arkadaşlar teşekkur ediyorum.. yalnız sizi soylediğiniz şekilde
kolon renkleniyor. ben satırı renklendirmek istiyorum .. kusura bakmayın ama hem arıyyorum hem de demolarda boyle birşey var ... ama cxgrid için yeni olduğumdan demolar bana çok karışık geldi
bu arada 4 versiyonunu kullanıyorum..
saygılarımla...
Cevapla