用一个botton来改变DBGrid的背景颜色dbgrid1.Canvas.Brush.color:=clyellow;鼠标选中DBGrid任意一个项,然后点击 一个 按键 把刚才选中的那个背景色变成黄色。要求: 如果选中的项不是同一个项 那么不改变之前的颜色。如 1 liu 23 address1
2 zhang 21 address2
3 wang 20 address2 鼠标选中 'liu' 后 点一个按键 把'liu'的背景色变成 黄色
选中 '23' 后 再点这个按键 把'23'的背景色也变成黄色,注意之前的 'liu'的黄色 还是依旧存在。这个 怎么实现 请各个大虾指定一下
2 zhang 21 address2
3 wang 20 address2 鼠标选中 'liu' 后 点一个按键 把'liu'的背景色变成 黄色
选中 '23' 后 再点这个按键 把'23'的背景色也变成黄色,注意之前的 'liu'的黄色 还是依旧存在。这个 怎么实现 请各个大虾指定一下
解决方案 »
- @str[1]与integer(str)为啥不同
- delphi不用控件连接数据库
- tchart 入门 入门 帮忙帮忙 88分
- 如何使用update 同时更新两个字段的数据?
- InstallShield打包时,凡是中文文件夹和中文文件名都无法打进去,如何解决?
- 在DELPHI中怎么创建临时表?
- 求 delphi 格式化处理 excel的技术文档
- 我想获得IE地址栏中的地址,怎么办啊???
- 利用saveDialog保存文件时,怎样为文件添加后缀呢?
- 各位大虾下午好,请教这样一个问题:如何把dbgrid中的表打印出来呀?急!
- 用delphi接收由net send发送的信息,即如何用DELPHI编程实现信息使服务来接收net send发来的信息?
- 求做毕业设计
2,在dbgrid中的ondrawcolumn..事件中编程实现
Dbgrid.DefaultDrawColumnCell( Rect, DataCol, Column, [gdFixed,gdFocused,gdSelected] );
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB, FileDB, Grids, DBGrids, StdCtrls, ADODB, ComCtrls, DBClient,
Provider;type
//着色的单元格位置
PCellData = ^TCellData;
TCellData = record
Book: string; //单元格对应的书签
Field: string; //单元格的列对应字段
end; TForm1 = class(TForm)
DBGrid1: TDBGrid;
DataSource1: TDataSource;
FileDataBase1: TFileDataBase;
ADOQuery1: TFileTable;
btnTogColor: TButton;
DataSetProvider1: TDataSetProvider;
ClientDataSet1: TClientDataSet;
DBGrid2: TDBGrid;
DataSource2: TDataSource;
btnClearColor: TButton;
procedure DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure btnClearColorClick(Sender: TObject);
procedure btnTogColorClick(Sender: TObject);
private
{ Private declarations }
FCellList: TList; //用来记录着色过的单元格
procedure ClearCellData;
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
begin
FCellList := TList.Create;
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
ClearCellData; //清理内存
FreeAndNil(FCellList);
end;procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState); function NeedColored: Boolean;
var
i: Integer;
Book, Field: string;
dtCell: PCellData;
begin
Book := Column.Field.DataSet.Book;
Field := Column.FieldName; //取出当前的书签和字段名在FCellList中查找,看是否存在,存在就要改变背景
for i := 0 to FCellList.Count - 1 do
begin
dtCell := FCellList[i];
if (dtCell.Book = Book) and SameText(dtCell.Field, Field) then
begin
Result := True;
Exit;
end;
end;
Result := False;
end;var
ACanvas: TCanvas;
begin
ACanvas := DBGrid1.Canvas;
if NeedColored then
ACanvas.Brush.Color := clRed;
DBGrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
end;procedure TForm1.ClearCellData;
var
i: Integer;
begin
//清空内存
for i := 0 to FCellList.Count - 1 do
Dispose(FCellList[i]);
FCellList.Clear;
end;procedure TForm1.btnClearColorClick(Sender: TObject);
begin
//清除所有背景
ClearCellData;
DBGrid1.Invalidate;
end;procedure TForm1.btnTogColorClick(Sender: TObject);
var
dtCell: PCellData;
begin
//标记当前的单元格颜色
if DBGrid1.DataSource.DataSet.Active and
not DBGrid1.DataSource.DataSet.IsEmpty then
begin
New(dtCell);
dtCell^.Book := DBGrid1.DataSource.DataSet.Book;
dtCell^.Field := DBGrid1.SelectedField.FieldName;
FCellList.Add(dtCell);
DBGrid1.Invalidate;
end;
end;end.
hang:=DBGrid1.DataSource.DataSet.RecNo;
lie:=Column.Index;然后在点击按键时 把定位的这个地方的底色变了
if Column.Index = lie then
if RecNo =hang then
DBGrid1.Canvas.Brush.Color := clGreen;
,但是不能改变已经弄好的单元颜色、
就是'liu'变红后 在点‘23’时 ‘liu’的 底色就给冲突了我做的 问题是 如果在同一行 老冲突。 一行只能变一个单元的颜色
列要用个数组来记录,每选中一个都记录到数组中,这样就能保存所有选过的列。Lies:array[0..MaxLieCnt] of integer;
if Column.Index=lie then------------>也要改成,循环判断Column.Index是不是在Lies[]中。