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
  Android-Grid uygulama kapanma gonulali 2 38 19 dakika önce
Son Yorum: mcuyan
  [ ÇÖZÜLDÜ ] Play Console İmza Sorunu ? Delphi 10.3 Mr.Developer 9 303 20-02-2019, Saat: 21:34
Son Yorum: Mr.Developer
  [Çözüldü] Bileşen var mı yok mu ? CesuR 12 360 20-02-2019, Saat: 00:05
Son Yorum: mrmarman
  [Çözüldü] FMX Servis Kalıcı Olarak Çalıştırma Halil Han Badem 1 752 01-02-2019, Saat: 20:14
Son Yorum: Halil Han Badem
  [Çözüldü] FMX VLC Player Desteği CesuR 9 352 28-01-2019, Saat: 11:59
Son Yorum: Yeliz



Konuyu Okuyanlar: 1 Ziyaretçi