Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj?

  • 12 odgovora
  • 5.843 pregleda

Najnovija ↓

Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 28.04.2005. u 18:54 · pre 261 mesec #1
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...
Potpis
And don't be mad at me for crying for humanity,
call it pretensions but I got good intentions,
to keep my sanity, I'm hoping, fuck, there's gotta be
an answer to their strategies and their evil inventions... ~Looptroop
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 29.04.2005. u 01:29 · pre 261 mesec #2
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.
Potpis
Play Store
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 29.04.2005. u 10:36 · pre 261 mesec #3
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:
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 29.04.2005. u 15:50 · pre 261 mesec #4
@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).
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 07.09.2005. u 10:12 · pre 257 meseci #6
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
Potpis
Give me six hours to chop down a tree and I will spend the first four sharpening the axe.
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 15.09.2005. u 18:23 · pre 257 meseci
izmenjeno 1 put, poslednji put dogriz 15.09.2005. u 18:24
  1. dogriz15.09.2005. u 18:24zapis iz teksta poruke
#7
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;
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 16.09.2005. u 09:31 · pre 257 meseci #9
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.
Potpis
Play Store
Re: Kako obojiti jedan red / cell u DBGrid ~ like komponenti i kojoj? 16.09.2005. u 16:54 · pre 257 meseci #13
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;
Potpis
Play Store
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme