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
  Web butona tıklama - Çözüldü Altıner 2 180 13-03-2024, Saat: 16:42
Son Yorum: Altıner
  Google play Uygulama yükleme hatası [Çözüldü] codder71 3 306 23-02-2024, Saat: 22:42
Son Yorum: codder71
  Delphi 12 Boş Form Derleme Hatası [Çözüldü] codder71 4 471 21-02-2024, Saat: 22:09
Son Yorum: codder71
  Android 33 api sdk güncelleme [ÇÖZÜLDÜ] codder71 4 358 19-02-2024, Saat: 22:38
Son Yorum: codder71
  FMX Android Barkod Scanner - [ÇÖZÜLDÜ] Mesut 21 2.164 20-12-2023, Saat: 21:46
Son Yorum: Jakarta2



Konuyu Okuyanlar: 1 Ziyaretçi