Discussion:
DBGrid.OnDrawColumnCell
Andrea Mauri
2009-09-17 09:53:01 UTC
Permalink
Dear all,
in my application I need to change the cell color of some cells in a DBGrid.
I use the OnDrawColumnCell event. My DBGrid name is dbgLoadings here the
OnDrawColumnCell event:

procedure TfrmPCA.dbgLoadingsDrawColumnCell(Sender: TObject; const Rect:
TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol >= 2 then
begin
dbgLoadings.Canvas.Font.Color:= clWhite;
dbgLoadings.Canvas.Brush.Color:= clRed;
end;
if DataCol >= 2 then
dbgLoadings.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;

It does not work. The Font appears fuzzy coloured like if the white font
is written upon the original balck one. And the foreground of the cell
remain white.

Any hint?
Regards,
Andrea

--
Luca Olivetti
2009-09-17 10:08:52 UTC
Permalink
Post by Andrea Mauri
Dear all,
in my application I need to change the cell color of some cells in a DBGrid.
I use the OnDrawColumnCell event. My DBGrid name is dbgLoadings here the
TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol >= 2 then
begin
dbgLoadings.Canvas.Font.Color:= clWhite;
dbgLoadings.Canvas.Brush.Color:= clRed;
end;
if DataCol >= 2 then
dbgLoadings.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;
It does not work. The Font appears fuzzy coloured like if the white font
is written upon the original balck one. And the foreground of the cell
remain white.
Any hint?
Regards,
Andrea
I leave DefaultDrawing to true and use the OnPrepareCanvas event to do that.
See also
http://wiki.freepascal.org/Grids_Reference_Page


Bye
--
Luca Olivetti
Wetron Automatización S.A. http://www.wetron.es/
Tel. +34 93 5883004 (Ext.133) Fax +34 93 5883007

--
matt shaffer
2009-09-17 12:36:06 UTC
Permalink
I thought I'd just throw this out there:
I'm still having issues with CPU usage and my customized grid. How often is
prepare canvas called? I would think only when the form would be moving or
otherwise need moving, but I suspect it's being called constantly. The grid
is quite customized, changing alignment for most cells, checking the strings
of every single cell and changing their fonts and backgrounds accordingly..
I'll throw in the code if anyone's interested.
Post by Luca Olivetti
Post by Andrea Mauri
Dear all,
in my application I need to change the cell color of some cells in a DBGrid.
I use the OnDrawColumnCell event. My DBGrid name is dbgLoadings here the
TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol >= 2 then
begin
dbgLoadings.Canvas.Font.Color:= clWhite;
dbgLoadings.Canvas.Brush.Color:= clRed;
end;
if DataCol >= 2 then
dbgLoadings.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;
It does not work. The Font appears fuzzy coloured like if the white font
is written upon the original balck one. And the foreground of the cell
remain white.
Any hint?
Regards,
Andrea
I leave DefaultDrawing to true and use the OnPrepareCanvas event to do that.
See also
http://wiki.freepascal.org/Grids_Reference_Page
Bye
--
Luca Olivetti
Wetron Automatización S.A. http://www.wetron.es/
Tel. +34 93 5883004 (Ext.133) Fax +34 93 5883007
--
_______________________________________________
Lazarus mailing list
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Vincent Snijders
2009-09-17 13:12:02 UTC
Permalink
Post by matt shaffer
I'm still having issues with CPU usage and my customized grid.
I thought I'd just throw this out:
Did you follow Jesus's last advice to which you did not respond?
Post by matt shaffer
If using OnPrepareCanvas event, try to use Canvas properties instead of grids properties ...
Read further in the original mail.

Vincent


--
Matt Shaffer
2009-09-17 20:52:33 UTC
Permalink
No, I must have missed that email altogether. Could you forward me the
message if possible? (dazappa.matt @ gmail.com) As I cannot find it in my
inbox, on mailarchive, or on the FPC mail archives.. If the email is on the
web and I have missed it, I would like to know.
Post by Vincent Snijders
Post by matt shaffer
I'm still having issues with CPU usage and my customized grid.
Did you follow Jesus's last advice to which you did not respond?
Post by matt shaffer
If using OnPrepareCanvas event, try to use Canvas properties instead of
grids properties ...
Read further in the original mail.
Vincent
--
_______________________________________________
Lazarus mailing list
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Vincent Snijders
2009-09-17 21:22:48 UTC
Permalink
Post by Matt Shaffer
No, I must have missed that email altogether. Could you forward me the
cannot find it in my inbox, on mailarchive, or on the FPC mail
archives.. If the email is on the web and I have missed it, I would like
to know.
I guess Graeme hijacked the thread ;-)

See:
http://lists.lazarus.freepascal.org/pipermail/lazarus/2009-August/044804.html

Vincent

--

Serge Girard (via Orange)
2009-09-17 13:15:27 UTC
Permalink
Post by matt shaffer
I'm still having issues with CPU usage and my customized grid. How
often is prepare canvas called? I would think only when the form would
be moving or otherwise need moving, but I suspect it's being called
constantly. The grid is quite customized, changing alignment for most
cells, checking the strings of every single cell and changing their
fonts and backgrounds accordingly.. I'll throw in the code if anyone's
interested.
Dear all,
in my application I need to change the cell color of some
cells in a DBGrid.
I use the OnDrawColumnCell event. My DBGrid name is
procedure TfrmPCA.dbgLoadingsDrawColumnCell(Sender: TObject;
const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol >= 2 then
begin
dbgLoadings.Canvas.Font.Color:= clWhite;
dbgLoadings.Canvas.Brush.Color:= clRed;
end;
if DataCol >= 2 then
dbgLoadings.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;
It does not work. The Font appears fuzzy coloured like if the
white font is written upon the original balck one. And the
foreground of the cell remain white.
Any hint?
Regards,
Andrea
I leave DefaultDrawing to true and use the OnPrepareCanvas event to do that.
See also
http://wiki.freepascal.org/Grids_Reference_Page
Bye
--
Luca Olivetti
Wetron Automatización S.A. http://www.wetron.es/
Tel. +34 93 5883004 (Ext.133) Fax +34 93 5883007
--
_______________________________________________
Lazarus mailing list
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
------------------------------------------------------------------------
--
_______________________________________________
Lazarus mailing list
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
Hello

use the OnPrepareCanvas instead of onDrawColumnCell (Bad Delphi Custom
lol )
here is an sample

procedure TForm1.DBGrid1PrepareCanvas(sender: TObject; DataCol: Integer;
Column: TColumn; AState: TGridDrawState);
begin
with (Sender as TDBGrid) do
begin
if (DataCol=0) OR (DataSource.DataSet.FieldByName('ID').asInteger<0)
then begin
Canvas.Brush.Color:=FixedColor; // or whatever color wanted
Canvas.Font.Color:=clWindowText; // idem
// Canvas.TextStyle.Alignment:=taCenter another tip to
center the text in the cell
end;
end;
end;
Andrea Mauri
2009-09-17 18:06:30 UTC
Permalink
it works, thanks!
andrea
Post by Luca Olivetti
Post by Andrea Mauri
Dear all,
in my application I need to change the cell color of some cells in a DBGrid.
I use the OnDrawColumnCell event. My DBGrid name is dbgLoadings here
procedure TfrmPCA.dbgLoadingsDrawColumnCell(Sender: TObject; const
Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if DataCol >= 2 then
begin
dbgLoadings.Canvas.Font.Color:= clWhite;
dbgLoadings.Canvas.Brush.Color:= clRed;
end;
if DataCol >= 2 then
dbgLoadings.DefaultDrawColumnCell
(Rect, DataCol, Column, State);
end;
It does not work. The Font appears fuzzy coloured like if the white
font is written upon the original balck one. And the foreground of
the cell remain white.
Any hint?
Regards,
Andrea
I leave DefaultDrawing to true and use the OnPrepareCanvas event to do that.
See also
http://wiki.freepascal.org/Grids_Reference_Page
Bye
--
Loading...