关于DBGrid的分类颜色显示

2016-02-19 16:24 24 1 收藏

下面请跟着图老师小编一起来了解下关于DBGrid的分类颜色显示,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

 这两天在csdn里转转,发现很多人问关于DBGRID或DBGRIDEH的分类显示的问题,今天闲下来,就这个问题聊两句。实际上对于DBGRID的自画,delphi 提供了两个事件供我们使用,
  一个是画行的:
  OnDrawDataCell(Sender: TObject; const Rect: TRect;  Field: TField; State: TGridDrawState);
  另一个是画列的:
  OnDrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState);
  这就给我们很大的方便。对于DBGRID的分类颜色显示,明显应该用第一个事件。那么怎么才能分类按颜色显示呢,实际上听起来很难,但实际上很简单。
          首先定义一个类型为TColor的变长数组,然后在数据集的AfterOpen事件中,将数组的长度定义为数据集的记录个数。然后根据你的分类计算出数组的每一个元素的颜色值,数组的每一个元素应该和数据集的一条记录相对应。最后,在你的OnDrawColumnCell事件中写下如下代码。
          DBGRID1.Canvas.Brush.Color := C[Low(c)+DBgrid1.DataSource.Dataset.RecNo()-1];
          上面是设置行的背景色,如果你要设置字体色只需要用
           DBGRID1.Canvas.Font.Color := C[Low(c)+DBgrid1.DataSource.Dataset.RecNo()-1];
          最后不要忘记了还要加上一句
          DBGrid1.DefaultDrawDataCell(Rect, Field, State);
  如此就可以随心所欲的显示你所喜欢的颜色。以上只是我的一点愚见,有心人会说了,你这样做效率很低的
  你需要将数据库全都遍历一遍。是的,你要想显示,肯定要遍历数据库,只不过对于大型数据库来说,你可以不一定在数据库的AfterOpen后做,你也可一一次只遍历数据库的一部分,比如说你在别的事件比如说ClientDataset的AfterGetRecords中作。另外最好的方法是在服务器端用一个存储过程计算此数组的值,这样是最有效率的方法。当然这些都是原理,这里不做详细讨论。下面是一个简单的DEMO将DBgrid的数据每10个
  一组显示红绿两色,在Delphi7.0下边以通过。
  unit Unit1;

  interface

  uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;

  type
    TForm1 = class(TForm)
      DataSource1: TDataSource;
      Query1: TQuery;
      DBGrid1: TDBGrid;
      procedure DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
        Field: TField; State: TGridDrawState);
      procedure Query1AfterOpen(DataSet: TDataSet);
      procedure FormCreate(Sender: TObject);
    private
      { Private declarations }
    public
      { Public declarations }
    end;

  var
    Form1: TForm1;
    clf:array of Tcolor;
  implementation
  {$R *.dfm}

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  
  procedure TForm1.FormCreate(Sender: TObject);
  begin
    Query1.Active := False;
    Query1.DatabaseName := 'DBDEMOS';
    Query1.SQL.Add('select * from orders');
    DataSource1.DataSet := Query1;
    Dbgrid1.DataSource := DataSource1;
    Dbgrid1.Align := alClient;
    Query1.Active := True;
  end;

  procedure TForm1.Query1AfterOpen(DataSet: TDataSet);
  var
    i,aa:integer;
    c:Tcolor;
  begin
    query1.DisableControls;
    setlength(clf,query1.RecordCount);
    query1.First;
    i := Low(clf);
    clf[i] := clRed;
    c := clRed;
    aa:=1;
    while not query1.Eof do
    begin
      if (query1.RecNo - aa)9 then
      begin
        aa := aa + 10;
        if c = clRed then c:= clGreen
        else c := clRed;
      end;
      clf[i] := c;
      Inc(i);
      query1.Next;
    end;
    query1.First;
    query1.EnableControls;
  end;

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

  procedure TForm1.DBGrid1DrawDataCell(Sender: TObject; const Rect: TRect;
    Field: TField; State: TGridDrawState);
  begin
      DBGrid1.Canvas.Brush.Color := clf[Dbgrid1.DataSource.DataSet.RecNo-1+Low(clf)];
      DBGrid1.DefaultDrawDataCell(Rect, Field, State);
  end;

  end.
  

来源:https://www.tulaoshi.com/n/20160219/1611992.html

延伸阅读
使用了高亮度橙色的站点通常都会给人一种晴朗新鲜的感觉,而通过将黄色、黄绿色等类似颜色与成色搭配使用,通常都能得到非常好的效果。同时,中等色调的橙色类似于泥土的颜色,所以也经常用来创造自然的氛围。 橙色是可以通过变换色调营造出不同氛围的典型颜色,它既能表现出青春的活力也能够实现沉稳老练的效果,所以橙色在中的使...
标签: Web开发
无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现。  无限级分类,主要是通过储存上级分类的id以及分类路径来实现。由于数据的结构简单,所以要将分类的关系由树状显示,我只能想到用递归的方式给于实现,下面是分类数据表结构和自己写的...
隔离霜颜色分为: 紫隔和绿隔⒈紫色:在色彩学中,紫色的互补色是黄色,因此紫色最具有中和黄色的作用。它的作用是使皮肤呈现健康明亮、白里透红的色彩。适合普通肌肤、稍偏黄的肌肤使用。⒉绿色:色彩学中,绿色的互补色是红色!绿色隔离霜可以中和面部过多的红色,使肌肤呈现亮白的完美效果。另外,还可有效减轻痘痕的明显程度。适...
黑色与白色表现出了两个极端的亮度,而这两种颜色的搭配使用通常可以表现出都市化的感觉。 只要能够合理地搭配使用黑色与白色,甚至可以做到比那些彩色的搭配更生动的效果。 黑色与白色的搭配通常用于现代派站点中,通过合理地添加一些彩色还可以得到突出彩色的效果。 Color Point: 白色有很强烈的感召力,它能够表现出如白雪般...
蓝紫色在色相环中位于蓝色和紫色之间,所以它也蕴含着紫色的一些神秘感。 低亮度的蓝紫色显得很有分量,而高亮度的蓝紫色显得非常高雅。在网页中,蓝紫色通常与蓝色一起搭配使用。 Color Point: 蓝紫色可以用来创造出都市化的成熟美,且蓝紫色可以使心情浮躁的人冷静下来。明亮的色调直至灰亮的蓝紫色有一种与众不同的神秘美感。...

经验教程

246

收藏

55
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部