Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

colorare righe in dbgrid

609 views
Skip to first unread message

Vegeta

unread,
Jan 20, 2003, 10:58:41 AM1/20/03
to
Si possono colorare le righe di una dbgrid corrispondenti
ad un valore true in un campo booleano, di una tabella
collegata a tale griglia??'?

Grazie


Alberto Salvati

unread,
Jan 21, 2003, 4:20:09 AM1/21/03
to
Si.
Ci sono 2 modi...
1) creare una tua classe dbgrid che redita dalla TDbgrid standard di delphi
e ridefinire alcuni metodi relativi al disegno della griglia

2) usare l'evento OnDrawColumnCell dopo aver impostato la prop
DefaultDrawing a False.

Bye

A.


Vegeta

unread,
Jan 23, 2003, 3:23:01 AM1/23/03
to
Se l'hai gią fatto, mi puoi aiutare?
Ridefinire la classe č scocciante, nel secondo caso, accedo
ad una colonna, come faccio a decidere di colorare una riga???

Ciao

"Alberto Salvati" <alsa...@supereva.it> ha scritto nel messaggio
news:b0j3re$29f0$1...@newsreader1.mclink.it...

Alberto Salvati

unread,
Jan 23, 2003, 4:11:43 AM1/23/03
to
Questo codice:

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:
TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
holdColor: TColor;
begin
holdColor := DBGrid1.Canvas.Brush.Color; {store the original color}
if Column.FieldName = 'EmpNo' then {only do for the cell displaying
EmpNo}
if (Column.Field.AsInteger mod 2 <> 0) then begin
DBGrid1.Canvas.Brush.Color := clGreen;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Brush.Color := holdColor;
end;
end;

l'ho preso da:
http://www.gnomehome.demon.nl/uddf/
Bye

A.


se vai su qualche sito di faq ne trovi vari esempi.

> come faccio a decidere di colorare una riga???

in base a una condizione IF stabilita da te..

Vegeta

unread,
Jan 23, 2003, 6:17:26 AM1/23/03
to
Grazie mille sembra funzionare, solo che mi colora solo la cella,
come faccio a fargli colorare tutto il rigo???

Ciao.


Alberto Salvati

unread,
Jan 23, 2003, 6:52:56 AM1/23/03
to
Lui passa per questo evento per ogni cella da disegnare.
Non per ogni "riga", ma proprio x ogni cella.
Quindi se hai 10 righe x 20 colonne lui passa di qui 200 volte, ok?

Quindi, il principio č:
non me ne frega niente di quale colonna č.
se per quel record il valore di quel particolare campo č x, voglio tutta la
riga in rosso
se per quel record il valore di quel particolare campo č y, voglio tutta la
riga in blu

Ora, leggi il codice che ti ho postato...
Trovi sia conforme a cio che ti serve?
Vedi che esiste un punto preciso nel quale devi intervenire?
Un piccolo sforzo e ci arrivi di sicuro..

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect:
TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
holdColor: TColor;
begin
holdColor := DBGrid1.Canvas.Brush.Color; {store the original color}
if Column.FieldName = 'EmpNo' then {only do for the cell displaying
EmpNo}
if (Column.Field.AsInteger mod 2 <> 0) then begin
DBGrid1.Canvas.Brush.Color := clGreen;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
DBGrid1.Canvas.Brush.Color := holdColor;
end;
end;

Bye

A.


Vegeta

unread,
Jan 23, 2003, 9:45:20 AM1/23/03
to
ci sono riuscito facendo in questo modo:

if DataMod.TAgenti.FieldByName('NonAttivo').AsBoolean = True
then GridAgenti.Canvas.Brush.Color := clRed //colore righe non attive
else GridAgenti.Canvas.Brush.Color := clWhite; //colore righe attive
GridAgenti.DefaultDrawColumnCell(Rect, DataCol, Column, State);
GridAgenti.Canvas.Brush.Color := clblue;

Grazie mille :)))))))


Vegeta

unread,
Jan 23, 2003, 9:52:35 AM1/23/03
to
Come faccio adesso a cambiare il colore di sfondo della riga
selezionata ed il testo della riga selezionata ????

>


Vegeta

unread,
Jan 23, 2003, 11:09:01 AM1/23/03
to
Tutti questi metodi sovrascrivono anche il colore della selezione
e non mi permettono + di vederlo, come posso fare???


Alberto Salvati

unread,
Jan 23, 2003, 11:28:39 AM1/23/03
to


Grande!
Ma si può scrivere la stessa cosa in modo, imho, + leggibile:

var
ColoreRiga: TColor;

With TDbgrid(Sender) do begin
if Datasource.Dataset.FieldByName('NonATtivo').AsBoolean then
ColoreRiga := clRed
else
ColoreRiga := clWhite;

DefaultDrawColumnCell(Rect, DataCol, Column, State);
Canvas.Brush.Color := clblue;
end;

Bye

A.

Vegeta

unread,
Jan 24, 2003, 3:35:01 AM1/24/03
to
A parte il with, trovo più leggibile la mia, solo che qui sembra
strana perchè i caratteri non sono a spaziatura fissa, e poi si
sa il modo di impaginare e organizzare il codice è personale...

Rino Le Boffe

unread,
Jan 30, 2003, 4:57:42 AM1/30/03
to

> Tutti questi metodi sovrascrivono anche il colore della selezione
> e non mi permettono + di vederlo, come posso fare???

Ma poi hai risolto questo problema?

Grazie in anticipo!
RLB

--------------------------------
Inviato via http://usenet.libero.it

Rino Le Boffe

unread,
Jan 30, 2003, 5:39:22 AM1/30/03
to
> > Tutti questi metodi sovrascrivono anche il colore della selezione
> > e non mi permettono + di vederlo, come posso fare???
>
> Ma poi hai risolto questo problema?


Ho RISOLTO !!!!!!!!!!!!!!!!

0 new messages