[ 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... |
[ Divjak @ 28.04.2005. 17:54 ] @
[ 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; Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|