在Delphi中随意控制DBGRID每一行的颜色 有个问题是在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。最初看到这个问题时,我们以为非常非常简单,所以马上动手准备解决它。结果却发现不是那么回事,传统方法根本不能发挥作用。在电脑面前一直坐到凌晨4点,不断地调试,幸运地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。 1、 数据表的建立 2、程序设置; procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if query1.FieldByName(’all’).asstring>40’ then begin dbgrid1.Canvas.Font.Color:=clred; dbgrid1.Canvas.Brush.color:=clyellow; end else begin dbgrid1.Canvas.Font.Color:=clblue; dbgrid1.Canvas.Brush.color:=clyellow; end;
有个问题是在Delphi中使用DBGrid时,如何让DBGrid中每一行颜色按照用户自己的意愿控制。最初看到这个问题时,我们以为非常非常简单,所以马上动手准备解决它。结果却发现不是那么回事,传统方法根本不能发挥作用。在电脑面前一直坐到凌晨4点,不断地调试,幸运地是凭借平时积累的一点编程经验,终于找到了开门的匙钥。现将它充公,供大家享用。 1、 数据表的建立 2、程序设置;
procedure Tinfo.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if query1.FieldByName(’all’).asstring>40’ then
begin
dbgrid1.Canvas.Font.Color:=clred;
dbgrid1.Canvas.Brush.color:=clyellow;
end
else
begin
dbgrid1.Canvas.Font.Color:=clblue;
dbgrid1.Canvas.Brush.color:=clyellow;
end;
dbgrid1.DefaultDrawColumnCell(rect,datacol,column,state);
end;
在Delphi中锁定DBGRID左边列 我 在 使 用 Delphi 5进 行 数 据 库 编 程 的 时 候,希 望 DBGRID构 件 在 显 示 数 据 的 时 候 能 象 FoxPro的BROWSE命 令 一 样 , 锁 定 左 边 指 定 的 几 列 不 进 行 滚 动 , 请 问 应 用 什 么 方 法 来 实 现 ?
我们知道 Delphi的 TStringGrid有 一 个 属 性 FixedCols来 指 定 不 滚 动 的列 。 虽 然 TDBGrid不 能 直 接 使 用 这 一 属 性 , 但 通 过 强 制 类 型 转 换 也 可 以 实 先 这 一 功 能 , 因为 这 两 个 类 都 来 自 TCustomGrid类 。 下 面 我 们 以 Delphi 3.0的 Demos\Db\CtrlGrid为 例 来说 明 具 体 的 用 法 。 在 这 个 例 子 的 TFmCtrlGrid.FormShow过 程 中 加 入 如 下 一 行 :TStringGrid(DbGrid1).FixedCols := 2;
运 行 该 程 序 ,在 左 右 移 动 各 列 时, Symbol列 不 会 移 动 。 除 了 这 种 方 法 , 也 可 以 采 用 下 面 的 方 法 : 首 先 在 Form声 明 部 分 加上 type TMyGrid = Class(TDBGrid) end;然 后 在 TFmCtrlGrid.FormShow过程中加入: TMyGrid(DbGrid1).FixedCols := 2;
两 者 从 形 式 上 略 有 不 同 , 但 实 质 都 是 一 样 的 。 我 们 这 里 设 置FixedCols为 2, 这 是 因 为 在 DBGrid构 件 最 左 侧 有 个 指 示 列 , 如 果 你 将 DBGrid的 Options属性 的 dgIndicator设 为False, 则 应 设 置 FixedCols为 1。
KeyLife富翁笔记
作者: archonwang
标题: DBGrid 应用全书(全面修订正在进行时)
关键字:
分类: 开发经验
密级: 公开
(评分:★★★★ , 回复: 29, 阅读: 5682) ??
在 Delphi 语言的数据库编程中,DBGrid 是显示数据的主要手段之一。但是 DBGrid 缺省的外观未免显得单调和缺乏创意。其实,我们完全可以在我们的程序中通过编程来达到美化DBGrid 外观的目的。通过编程,我们可以改变 DBGrid 的表头、网格、网格线的前景色和背景色,以及相关的字体的大小和风格。
以下的示例程序演示了对 DBGrid 各属性的设置,使 Delphi 显示的表格就像网页中的表格一样漂亮美观。
示例程序的运行:
在 Form1 上放置 DBGrid1、Query1、DataSource1 三个数据库组件,设置相关的属性,使 DBGrid1 能显示表中的数据。然后,在 DBGrid1 的 onDrawColumnCell 事件中键入以下代码,然后运行程序,就可以看到神奇的结果了。本代码在 Windows98、Delphi5.0 环境下调试通过。
procedure TMainForm.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;State: TGridDrawState);
var i :integer;
begin
if gdSelected in State then Exit;
file://定义表头的字体和背景颜色:
for i :=0 to (Sender as TDBGrid).Columns.Count-1 do
begin
(Sender as TDBGrid).Columns[i].Title.Font.Name :='宋体'; file://字体
(Sender as TDBGrid).Columns[i].Title.Font.Size :=9; file://字体大小
(Sender as TDBGrid).Columns[i].Title.Font.Color :=$000000ff; file://字体颜色(红色)
(Sender as TDBGrid).Columns[i].Title.Color :=$0000ff00; file://背景色(绿色)
end;
file://隔行改变网格背景色:
if Query1.RecNo mod 2 = 0 then
(Sender as TDBGrid).Canvas.Brush.Color := clInfoBk file://定义背景颜色
else
(Sender as TDBGrid).Canvas.Brush.Color := RGB(191, 255, 223); file://定义背景颜色
file://定义网格线的颜色:
DBGrid1.DefaultDrawColumnCell(Rect,DataCol,Column,State);
with (Sender as TDBGrid).Canvas do file://画 cell 的边框
begin
Pen.Color := $00ff0000; file://定义画笔颜色(蓝色)
MoveTo(Rect.Left, Rect.Bottom); file://画笔定位
LineTo(Rect.Right, Rect.Bottom); file://画蓝色的横线
Pen.Color := $0000ff00; file://定义画笔颜色(绿色)
MoveTo(Rect.Right, Rect.Top); file://画笔定位
LineTo(Rect.Right, Rect.Bottom); file://画绿色的竖线
end;
end;
FixedRows