2012-10-15 15 views
9

Può essere semplice ma sono un * * di un codice di esempio che trova il tempo per cambiare il colore di una riga di una stringa in base a un valore da un database in FireMonkey. Ho dati provenienti da un MDB senza problemi, ma ho bisogno che la riga sia di determinati colori per esempio '1' = rosso '2' = verde ecc. So che devo accedere agli elementi di stile in qualche modo 'OnApplyStyleLookup'? ma in quale fase. Ho visto domande su come cambiare lo stile e il colore del testo, ecc. Ma sto scavando un buco per me stesso cercando di arrivare all'elemento "sfondo" e applicandolo. Qualsiasi aiuto sarebbe molto apprezzato. Acclamazioni Richard ... (novizio di FireMonkey)Colorare lo sfondo della cella su firemonkey stringgrid in base al valore dei dati

+0

Per impostare il colore avresti bisogno di eseguire l'override del metodo SetData di la cella, ma la classe della cella è codificata in un StringGrid. Per farlo devi utilizzare una griglia normale con una classe di celle personalizzata. Date un'occhiata al mio articolo su http://monkeystyler.com/blog/entry/firemonkey-grid-basics-custom-cells-and-columns per come farlo. –

+0

Grazie a tutti Mike. Il tuo articolo sembra ben documentato. Lavoro a tempo pieno (non programmando) quindi so cosa farò questo fine settimana. –

risposta

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

Questo è il mio codice con Delphi di Berlino che funziona bene:

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; 
Problemi correlati