cxGrid tek satır olunca renklendirme çalışmıyor

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

cxGrid tek satır olunca renklendirme çalışmıyor

Mesaj gönderen adelphiforumz »

Selamlar

Aşağıdaki şekilde xcgrid içerisinde satır içindeki renk koduna göre renklendirme yapıyorum
Fakat grid içinde tek satır var ise default renk devreye giriyor
Acaba nerede yanlış yapıyorum

Teşekkürler

Kod: Tümünü seç

const
    caHexColors : array[0..15] of String = ('#FF0000', '#FFFF00', '#FF8000', '#00FFFF', '#0080FF', '#FF8080', '#FF00FF', '#66FFCC', '#FFCC33', '#666666', '#66FFCC', '#66FF00', '#99CCFF', '#CC9933', '#666666', '#CC9999');
...
...
...
procedure TdlgUrunler.ViewListeStylesGetContentStyle(Sender: TcxCustomGridTableView; ARecord: TcxCustomGridRecord; AItem: TcxCustomGridTableItem; var AStyle: TcxStyle);
var
  AView: TcxGridDBTableView;
  iRenkNo : SmallInt;
  sHex:String;
  iRenk : Int64;
begin
    AView := Sender as TcxGridDBTableView;
    if AView.DataController.DataSource.DataSet.IsEmpty then exit;
    iRenkNo := ARecord.Values[AView.GetColumnByFieldName('RenkNo').Index];
    AStyle := csDefault;
    if iRenkNo >= 0 then
    begin
        sHex := StringReplace(caHexColors[iRenkNo], '#', '', [rfReplaceAll]);
        AStyle.Color := fn_Renk_HexToColor(sHex);
    end;
end;
En son adelphiforumz tarafından 18 Ağu 2017 04:08 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cxDrid tek satır olunca renklendirme çalışmıyor

Mesaj gönderen ertank »

Merhaba,

İlk akla gelen sebepler:
- Eğer Focus cxGrid üzerinde ise tek satır olduğu zaman seçili halde olup rengini clHighlight, clHighlightText renklerini kullanıyor olabilir.
- Tablo içinde renk kaydı hatalı olabilir
- fn_Renk_HexToColor() bir sebepten yanlış renk kodu çevirip AStyle.Color değişmiyor olabilir.

Yapılabilecek denemeler:
1- Farklı tek kayıt bırakarak veya mevcut tek kaydın renk kodundan emin olarak tekrar denemenizde fayda var.

2- Debug modunda AStyle.Color değerinin değiştiğini görmenizde fayda var.

3- Eğer Focus kaynaklı bir sorun yaşıyor iseniz;
3A- TcxGrid.OptionsSelection.InvertSelect değerini False yaparak test edebilirsiniz. Ancak bu durumda seçili olan satır kullanıcı tarafından açıkça anlaşılamayabilir.
3B- TcxGrid.Styles.Inactive için bir stil belirleyerek renklendirme prosedürü içinde Inactive olarak tanımlanan stil değerlerini de değiştirerek ardından Focusu farklı bileşene taşıyarak test etmenizde fayda var. Tabi ekran üzerinde Focus alabilecek başka bir bileşen yok ise bu mümkün olmayacaktır.
Kullanıcı avatarı
adelphiforumz
Üye
Mesajlar: 602
Kayıt: 01 Nis 2008 05:38
Konum: İstanbul

Re: cxDrid tek satır olunca renklendirme çalışmıyor

Mesaj gönderen adelphiforumz »

"ertank" hocam ilginize teşekkürler
Sorularınızın cevabı aşağıdaki şekildedir
Satır Seçili değil focus yapılan başka bir alan mevcut.
Renk kodu FF0000 yani kırmızı RGB(255.0.0)
InvertSelect kaldırıp denedim yinede olmadı.
StyşeRepository üzerinden farklı bir style tanımlayıp denedim yine olmadı.

Bir arkadaşın tavsiyesi üzerine renklendirme işini aşağıdaki şekilde CustomDrawCell evente taşıyınca çalışıyor
Fakat sorun nedir halen belli değil

Kod: Tümünü seç

procedure TdlgUrunler.ViewListeCustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean);
var
  iRenkNo : Byte;
  sHex:String;
begin
    try
        iRenkNo := AViewInfo.GridRecord.Values[(Sender as TcxGridDBTableView).GetColumnByFieldName('RenkNo').Index];
        if iRenkNo >= 0 then
        begin
            sHex := StringReplace(caHexColors[iRenkNo], '#', '', [rfReplaceAll]);
            ACanvas.Brush.Color := fn_Renk_HexToColor(sHex);
        end;
    except
    end;
end;

Ehil olmayanlara sabretmek ehil olanları parlatır.
Akıllı birisinden gelen cefa, bilgisizlerin vefasından iyidir.
Bilgiye ulaştı mı ayak, kanat olur
Biz insanı kıyafetiyle ağırlar bilgisiyle uğurlarız.
Mevlana
ertank
Kıdemli Üye
Mesajlar: 1657
Kayıt: 12 Eyl 2015 12:45

Re: cxDrid tek satır olunca renklendirme çalışmıyor

Mesaj gönderen ertank »

Bileşen hatası olabilir. Üreticisine bilgi vermekte fayda var.
Cevapla