Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
[Çözüldü] Fmx grid veya stringgrid hücre renklendirme
#1
Konuyu kapatmıştım ama son gördüğüm örnek dikkatimi çekti. Aşağıdaki örnekte Fmx te stringgridin içindeki bilgiye göre hücre rengi değiştiriliyor. Fakat sorun tek bir hücre değil bütün kolon veya satırın rengi değişiyor. Sadece tek bir hücrenin rengini nasıl değiştiririm.

procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;
 const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
 const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
 aRowColor: TBrush;
 aNewRectF: TRectF;
begin
 aRowColor := TBrush.Create(TBrushKind.Solid, TAlphaColors.Alpha);

 if (StringGrid1.Cells[1, Row] = '1') then
   aRowColor.Color := TAlphaColors.Green
 else
   aRowColor.Color := TAlphaColors.Red;

 aNewRectF := Bounds;
// aNewRectF.Inflate(3, 3);
 Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
 Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);

 aRowColor.free;
end;
Cevapla
#2
Merhaba.

Şu kodda ne yazıyor onu yorumlarsanız cevabını vermişsiniz... 

 if (StringGrid1.Cells[1, Row] = '1') then
   aRowColor.Color := TAlphaColors.Green
 else
   aRowColor.Color := TAlphaColors.Red;

Türkçe olarak yazalım. 

- Eğer StringGrid1'in; (1) nolu Sütun ve boyanan Satır adresli hücre içeriği 1 ise yeşil yap, değilse kırmızı.

- Şimdi siz talebinizi bildirin, (1) nolu sütun değil de Column deseydiniz (hani parametrelerde var ya oradaki ismi Canvas, Row, Column, Bounds vs.vs) ne anlama gelirdi, hatta deneyin.

- Burada şunu öğreneceğiz, boyanacak hücre, boyanmadan önce parametrelerdeki Row ve Column değeri size sunuluyor. Siz de bu değerleri If ve/veya Case gibi yönlendirme komutlarıyla dizginliyorsunuz.

- Deseydiniz ki 
 if (StringGrid1.Cells[1, 1] = '1') then
   aRowColor.Color := TAlphaColors.Green
 else
   aRowColor.Color := TAlphaColors.Red;

- Örneğinde Sadece [1, 1] adresli hücrenin değerine odaklanır (1) ise Yeşil, başka ise Kırmızı olur, ama diğer yandan geriye kalan hücreler (1) mi olmuş başka mı olmuş hiç ilgilenmeyecek, boyamaksızın bırakacaktır..

- Devamı için yolunuz açık olsun. FMX'den soğumayın girdikçe seveceksiniz. Bu kısımda sadece TAlpahaColors ile FMX gördünüz, StyleBook daha da ileride...
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#3
Siz yanlış analamadıysam , Zaten sıkıntıda orada tek bir hücre değil o hücrenin olduğu satırı sütünü boyuyor. Yani sizin dediğiniz gibi denediğimde  aynı sonucu aldığım için arayış içindeyim. Şu şekilde kullansamda aynı. Bi yerde birşey kaçırıyorum ama ney onu bulamadım.
 if (StringGrid1.Cells[1, 1] = '1') then



oXd1Eq.png
Cevapla
#4
Başlar başlamaz ümidiniz kırılmasın diye verdiğiniz kodu revize ediyorum.

Açıklamalarımı okuduğunuz anladığınız ancak FMX tipi kod acemiliğine veriyorum.

Aşağıdaki örnekte sadece 4,4 adresli hücreye odaklandım. Sadece oradaki içeriği değerlendirdi.

Siz bu kodu kendinize göre revize ederek, sınırlarınızı belirler, içeriğe göre adım atarsınız.


procedure TForm1.StringGrid1DrawColumnCell(Sender: TObject;
 const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF;
 const Row: Integer; const Value: TValue; const State: TGridDrawStates);
var
aRowColor: TBrush;
aNewRectF: TRectF;
begin
 aRowColor := TBrush.Create( TBrushKind.Solid, TAlphaColors.Alpha );

 aRowColor.Color := TAlphaColors.White; // Varsayılan Hücre Rengi.

 if (Row = 4) AND (Column.Index = 4) then begin
   if TStringGrid(sender).Cells[ Column.Index, Row ] = '1'
   then aRowColor.Color := TAlphaColors.Red
   else aRowColor.Color := TAlphaColors.Green;
 end;

 aNewRectF := Bounds;
   Canvas.FillRect(aNewRectF, 0, 0, [], 1, aRowColor);
   Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State);
 aRowColor.free;
end;
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif


Cevapla
#5
Teşekkür ediyorum emeğinize sağlık. Bu kadar basit bir şeyi ben 4 gündür göremediğim ya ne deseniz haklısınız. Daha çok yol almam lazım çok..
Cevapla


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Özel bir StringGrid narkotik 0 90 08-09-2019, Saat: 01:30
Son Yorum: narkotik
  Tgrid ve StringGrid Footer olayı. seydigozegir@gmail.com 8 154 28-08-2019, Saat: 15:22
Son Yorum: seydigozegir@gmail.com
  [Çözüldü]Müşterilerin siparişleri tek isimde görünsün hakanharbeli 4 404 04-06-2019, Saat: 11:55
Son Yorum: FiRewaLL
  Thread kullanmadan veya IdThreadComponent ile AniIndicator kullanımı hk. pro_imaj 17 3.708 30-05-2019, Saat: 17:32
Son Yorum: caoster
  FMX Vertical Grid pro_imaj 5 576 10-05-2019, Saat: 17:04
Son Yorum: pro_imaj



Konuyu Okuyanlar: 1 Ziyaretçi