zoukankan      html  css  js  c++  java
  • Delphi DBGrid显示颜色应用技巧 [转]

    在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目的。通过编程,我们可以改变 DBGrid 的表头、网格、网格线的前景色和背景色,以及相关的字体的大小和风格。
        以下的示例程序演示了对 DBGrid 各属性的设置,使 Delphi 显示的表格就像网页中的表格一样漂亮美观。
        示例程序的运行:
        在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。本代码在 Windows98、Delphi5.0 环境下调试通过。

    View Code
    procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
    const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
    var i :integer;
    begin
    if gdSelected in State then Exit;
    //定义表头的字体和背景颜色:
    for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
    begin
    (Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; //字体
    (Sender as TDBGrid).Columns[i].Title.Font.Size :=9; //字体大小
    (Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; //字体颜色(红色)
    (Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; //背景色(绿色)
    end;
    //隔行改变网格背景色:
    if Query1.RecNo mod 2 = 0 then
    (Sender as TDBGrid).Canvas.Brush.Color := clInfoBk //定义背景颜色
    else
    (Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); //定义背景颜色
    //定义网格线的颜色:
    DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
    with (Sender as TDBGrid).Canvas do //画 cell 的边框
    begin
    Pen.Color := $00ff0000; //定义画笔颜色(蓝色)
    MoveTo(Rect.Left, Rect.Bottom); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画蓝色的横线
    Pen.Color := $0000ff00; //定义画笔颜色(绿色)
    MoveTo(Rect.Right, Rect.Top); //画笔定位
    LineTo(Rect.Right, Rect.Bottom); //画绿色的竖线
    end;
    end;

    Delphi中的数据网格控件(TDbGrid)对于显示和编辑数据库中大量的数据起着十分重要的作用;然而,在使用数据网格控件的同时,也往往因为表格中大量的数据不易区分,而令操作者眼花缭乱。如何提高网格控件的易用性,克服它的此项不足呢?本文从改变数据网格的色彩配置角度,提出了一种解决办法。

        以下为数据网格控件的6种特殊效果的实现方法,至于数据网格控件与数据集如何连接的方法从略。

    1. 纵向斑马线效果:实现网格的奇数列和偶数列分别以不同的颜色显示以区别相邻的数据列。

    Case DataCol Mod 2 = 0 of
    True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
    False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
    End;
    DbGrid1.Canvas.Pen.Mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (Rect
    Data
    ColColumn
    State);


    2. 纵向斑马线,同时以红色突出显示当前单元格效果:以突出显示当前选中的字段。

    file://将上述代码修改为:
    Case DataCol Mod 2 = 0 of
    True: DbGrid1.Canvas.Brush.Color:= clBlue; file://偶数列用蓝色
    False: DbGrid1.Canvas.Brush.Color:= clAqua; file://奇数列用浅绿色
    End;
    If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    If Not DbGrid1.SelectedRows.CurrentRowSelected then
    DbGrid1.Canvas.Brush.Color:=clRed; file://当前选中单元格显示红色
    DbGrid1.Canvas.Pen.Mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (Rect
    DataCol
    Column
    State);

    上述两种方法突出了列的显示效果。

    3.在数据网格中以红色突出显示当前选中的行。
        设置DbGrid控件的Options属性中的dgRowSelect属性为真,Color属性为clAqua(背景色)
    在DbGrid的DrawColumnCell事件中编写如下代码:

    if ((State = [gdSelected]) or (State=[gdSelected gdFocused])) then
    DbGrid1.Canvas.Brush.color:=clRed; file://当前行以红色显示,其它行使用背景的浅绿色
    DbGrid1.Canvas.pen.mode:=pmmask;
    DbGrid1.DefaultDrawColumnCell (Rect
    DataCol
    Column
    State);

    4.行突显的斑马线效果:既突出当前行,又区分不同的列(字段)。

    file://其它属性设置同3,将上述代码修改为:
    if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    begin
    Case DataCol Mod 2 = 0 of
    True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列显示红色
    False: DbGrid1.Canvas.Brush.color:=clblue; file://当前选中行的奇数列显示蓝色
    end;
    DbGrid1.Canvas.pen.mode:=pmmask;
    DbGrid1.DefaultDrawColumnCell (Rect
    DataCol
    Column
    State);
    end;

    5.横向斑马线, 同时以红色突显当前行效果。

    file://其它属性设置同3,将上述代码修改为:
    Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
    True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
    False: DbGrid1.Canvas.Brush.color:=clblue; file://奇数行用蓝色表示
    end;
    if ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then file://选中行用红色显示
    DbGrid1.Canvas.Brush.color:=clRed;
    DbGrid1.Canvas.pen.mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (Rect
    DataCol
    Column
    State);

    6.双向斑马线效果:即行间用不同色区分,同时,选中行以纵向斑马线效果区分不同的列。

    file://其它属性设置同3,将上述代码修改为:
    Case Table1.RecNo mod 2 = 0 of file://根据数据集的记录号进行判断
    True : DbGrid1.Canvas.Brush.color:=clAqua; file://偶数行用浅绿色显示
    False: DbGrid1.Canvas.Brush.color:= clblue; file://奇数行用蓝色表示
    end;
    If ((State = [gdSelected]) or (State=[gdSelectedgdFocused])) then
    Case DataCol mod 2 = 0 of
    True : DbGrid1.Canvas.Brush.color:=clRed; file://当前选中行的偶数列用红色
    False: DbGrid1.Canvas.Brush.color:= clGreen; file://当前选中行的奇数列用绿色表示
    end;
    DbGrid1.Canvas.pen.mode:=pmMask;
    DbGrid1.DefaultDrawColumnCell (Rect
    DataCol
    Column
    State);

        上述6种方法分别就数据网格控件的列和行的色彩进行了设置,读者可以根据自己的需要设置特效。该程序在Delphi5中测试通过。

  • 相关阅读:
    SparkSql初级编程实践
    云时代架构之苏宁安全架构演进及实践
    云时代架构之知乎网站架构变迁史
    质量属性的六个常见属性场景之《淘宝网》
    云时代架构之游戏服务器的架构演进
    《架构漫谈阅读心得》
    转换后缀表达式
    约瑟夫环(改进3.0)
    栈结构之后缀表达式
    约瑟夫环(改进2.0)
  • 原文地址:https://www.cnblogs.com/tangqs/p/2185392.html
Copyright © 2011-2022 走看看