[Lazarus] DBGrid.OnDrawColumnCell

Serge Girard (via Orange) girard.sergea at orange.fr
Thu Sep 17 15:15:27 CEST 2009


matt shaffer a écrit :
> 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.
>
> On Thu, Sep 17, 2009 at 6:08 AM, Luca Olivetti <luca at wetron.es 
> <mailto:luca at wetron.es>> wrote:
>
>     En/na Andrea Mauri ha escrit:
>
>         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
>
>
>     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
>     Lazarus at lists.lazarus.freepascal.org
>     <mailto:Lazarus at lists.lazarus.freepascal.org>
>     http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
>
>
> ------------------------------------------------------------------------
>
> --
> _______________________________________________
> Lazarus mailing list
> Lazarus at lists.lazarus.freepascal.org
> 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;    
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus/attachments/20090917/517056b6/attachment-0004.html>


More information about the Lazarus mailing list