[ Divjak @ 28.04.2005. 17:54 ] @
Dakle, preporucite neku komponentu u kojoj se redovi ekstremno lako boje, i koja ima mogucnost da u zavisnosti od value nekog polja da boju fontu...
[ Srki_82 @ 29.04.2005. 00:29 ] @
To mozes uraditi i sa obicnom (DB)Grid komponentom. U OnDrawCell eventu na osnovu vrednosti celije postavis Brush.Color i Font.Color (ili mozda jos neki atribut za font... recimo bold) na zeljenu vrednost. Brush.Color je boja pozadine, a Font>Color je boja texta. Kad to sve podesis pozoves samo DefaultDraw (ne secam se kako se tacno zove funkcija) i ona ce sa definisanim bojama iscrtati celiju.
[ tamnicar @ 29.04.2005. 09:36 ] @
samo da se nadovezem na Srki-ja, i da "konkretninje" objasnim :)
evo kako sam ja odradio,
na property DrawDolumnCell, DBGrid-a sam stavio code:

If odd(izvorPodataka.DataSet.RecNo) then
tabelaIzbora.Canvas.Brush.Color:=nekaBoja
else
tabelaIzbora.Canvas.Brush.Color:=nekaDrugaBoja;

tabelaIzbora.DefaultDrawColumnCell(Rect,DataCol,Column,State);

ovaj code mi daje za rezultat da mi svaki neparan red bude obojen u nekaDrugaBoja, a paran u nekaBoja!

evo ti jos jedan primer kako se boji red koji je selektovan:
if (gdSelected in State) then
begin
DBGrid1.Canvas.Font.Color := clPurple;
DBGrid1.Canvas.Brush.Color := clLime;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top,Column.Field.AsString);
end
else
begin
DBGrid1.Canvas.Font.Color := clBlue;
DBGrid1.Canvas.Brush.Color := clAqua;
DBGrid1.Canvas.FillRect(Rect);
DBGrid1.Canvas.TextOut(Rect.Left, Rect.Top,Column.Field.AsString);
end;

poz :wave:
[ _v!rus_ @ 29.04.2005. 14:50 ] @
@tamnicar
U onaj drugi primer treba da se doda provera kako je poravnat tekst u koloni:
Code:

const
  TextDist = 3;
...
...
  if Column.Alignment = taLeftJustify then
    TDBGrid(Sender).Canvas.TextOut(Rect.Left + TextDist, Rect.Top, Column.Field.AsString)
  else if Column.Alignment = taRightJustify then
    TDBGrid(Sender).Canvas.TextOut(Rect.Right - TDBGrid(Sender).Canvas.TextWidth(Column.Field.AsString) - TextDist, Rect.Top, Column.Field.AsString)
  else
    TDBGrid(Sender).Canvas.TextOut((Rect.Right - Rect.Left - TDBGrid(Sender).Canvas.TextWidth(Column.Field.AsString)) div 2 + Rect.Left, Rect.Top, Column.Field.AsString);


Ovo mozes da stavis u poseban unit i svakoj Dbg u projektu dodelis za OnDrawColumnCell, onda svi gridovi ce se isto iscrtavati. Lose je koristiti specijalizovano npr. DBGrid1 kda imas Sender. Takodje treba da TDBGrid.DefaultDrawing stavis na false.

Btw. jel zna neko kako bez pisanja f-je koja sabira sirine column-a dobiti zbirnu sirinu svih polja (potrebno za iscrtavanje focucRect sa ivicama).
[ engineer @ 30.04.2005. 09:44 ] @
Imate zanimljivih tekstova na About.com - pogledajte na primer http://delphi.about.com/od/usedbvcl/l/aa031699.htm
[ mojeKorIme @ 07.09.2005. 09:12 ] @
Ovo je sve OK..

mene zanima kako da obojim pojedine redove dbgrid-a na klik dugmeta,
koje se nalazi na istoj formi kao i dbgrid, npr. da ofarba sve redove koji imaju vrijednost -1 za neko polje...

Hvala
[ dogriz @ 15.09.2005. 17:23 ] @
Code:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  if (Column.FieldName='xxxxx') then
    if Column.Field.AsFloat=-1 then
      begin
        DBGrid1.Canvas.Font.Color:=clRed;
        DBGrid1.Canvas.Brush.Color:=clLime;
      end;
  DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;


[Ovu poruku je menjao dogriz dana 15.09.2005. u 18:24 GMT+1]
[ mojeKorIme @ 16.09.2005. 06:08 ] @
U pravu si... ovo ce ofarbati te kolone... ali kako to uciniti na buttonclick ili na neki drugi event:)

Pozdrav
[ Srki_82 @ 16.09.2005. 08:31 ] @
Dodaj jednu boolean promenljivu... recimo Oboji: Boolean i pritiskom na zeljeno dugme taj flag postavi na True ili slicno i kada primis OnDrawColumnCell event prvo proveris flag i na osnovu njega odlucujes kojom bojom sta da bojis.
[ mojeKorIme @ 16.09.2005. 09:03 ] @
Vazi li to i kada je dbgrid vec nacrtan na formu tj kada se to dugme nalazi na istoj formi kao i db grid*
[ Srki_82 @ 16.09.2005. 10:30 ] @
Naravno da vazi. Kad promenis flag samo pozoves DBGrid.Refresh i grid ce se ponovo iscrtati.
[ mojeKorIme @ 16.09.2005. 10:40 ] @
WOW radi hvala puno ...samo me jos interesuje kako obojiti citav red a ne samo celiju u kojoj je podatak

Hvala jos jednom ;)
[ Srki_82 @ 16.09.2005. 15:54 ] @
Koristi OnDrawDataCell event.

Code:
procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect; Field: TField; State: TGridDrawState);
begin
  if Table1.FieldByName('Cena').AsFloat > 1000000 then
    DBGrid1.Canvas.Brush.Color := clRed;
  DBGrid1.DefaultDrawDataCell(Rect, Field, State);
end;