2012-10-15 15 views
9

Temel olabilir, ancak bir veritabanındaki bir değere bağlı olarak stringgrid satır rengini değiştirmek için bir örnek bulma kodunun * * Ateş maymunu. Ben bir MDB gelen herhangi bir sorun var ama satır '' 1 '= kırmızı' 2 '= yeşil vb için belirli bir renk olması gerekir. Biliyorum bir şekilde' OnApplyStyleLookup 'Stil öğeleri erişmek zorundayım? ama hangi aşamada. Metin stili ve renk vb. Ile ilgili sorularım var ama kendimi 'arka plan' öğesine ulaşmaya ve uygulamak için bir delik kazıyorum. Herhangi bir yardım büyük takdir edilecektir. Şerefe Richard ... (FireMonkey için acemi)Firemonkey stringgrid üzerinde hücre arka planının veriye göre değeri

+0

Eğer SetData yöntemini geçersiz gerekiyordu rengini ayarlamak için hücre, ancak hücre sınıfı bir StringGrid'de kodlanmış. Bunu yapmak için özel bir hücre sınıfı ile normal bir ızgara kullanmanız gerekir. Bunu nasıl yapacağımı öğrenmek için http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns adresindeki makaleme bir göz atın. –

+0

Çok şükür Mike. Makaleniz iyi belgelenmiş görünüyor. Tam zamanlı çalışıyorum (programlama değil), bu haftasonu ne yapacağımı biliyorum. –

cevap

4
{OnDrawColumnCell event} 

procedure OnDrawColumnCell(Sender: TObject; 
    const Canvas: TCanvas; const Column: TColumn; const Bounds: TRectF; 
    const Row: Integer; const Value: TValue; const State: TGridDrawStates); 
var 
    RowColor : TBrush; 
begin 

    RowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 

{you can check for values and then set the color you want} 
    if Value.ToString = 'red' then 
    RowColor.Color := TAlphaColors.Red; 

    Canvas.FillRect(Bounds, 0, 0, [], 1, RowColor); 

    { perform default drawing } 
    TGrid(Sender).DefaultDrawColumnCell(Canvas, Column, Bounds, Row, 
    Value, State); 
end; 
0

Bu iyi çalışır Delphi Berlin ile benim kodudur:

var 
    aRowColor: TBrush; 
begin 
    //it's better to write this line into create 
    aRowColor := Tbrush.Create(TBrushKind.Solid,TAlphaColors.Alpha); 
    //----- 
    grid.DefaultDrawing := False; 
    if (myTbl.RcrdDataCount > 0) and (Row < myTbl.RcrdDataCount) then begin 
    if myTbl.RcrdDataItems[Row].State = TStateDeleted then begin 
     aRowColor.Color := TAlphaColors.Red; 
    end 
    else begin 
     aRowColor.Color := TAlphaColors.Gray; 
    end; 
    Canvas.FillRect(Bounds, 0, 0, [], 1, aRowColor); 
    Column.DefaultDrawCell(Canvas, Bounds, Row, Value, State); 
    end; 
    //it's better to write this line into destroy 
    aRowColor.free; 
    //----- 
end; 
İlgili konular