Delphi DBGRID中 根据不同的字段值显示不同的小图标

问题简介:

在DBGRID中显示图片,或者根据不同的字段值显示不用的小图片,有两种方法:

1>、使用DBGridEH设置相应的属性;

2>、使用代码,自己在DrawColumnCell事件中进行重画;

 

1 、使用DBGridEH设置相应的属性

在数据单元格中显示不用的图片,具体设置如下:

<a>、添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。

<b>、然后将需要显示图片的列的imagelist属性设置为img1;

<c>、在keylist属性中添加实际数据存储值,一行为一个值,

            注意:一定要与imagelist中图片顺序一一对应,否则会张冠李戴,面目全非。

<d>、还可在picklist中添加提示信息,也要求是一行为一个值,

<e>、并设tooltip为true,那么,运行时当鼠标移动到该数据单元格时在显示图片的同时还显示提示信息,

             怎么样,功能够强大吧!可使用空格键或鼠标切换下一张图片,图片切换的同时也改变了实际存

储数据值。也可通过shift+空格或鼠标切换为上一张图片。这样就实现了上下两个方向图片切换。

 

2.使用代码,自己在DrawColumnCell事件中进行重画

1>.添加一个imagelist组件img1并在其中添加一组bmp,ico格式的图片。

2>.在DBGRID控件的DrawColumnCell事件中添加如下代码:

procedure TManageProjForm.DBGrid1DrawColumnCell(Sender: TObject;
  const Rect: TRect; DataCol: Integer; Column: TColumnEh;
  State: TGridDrawState);
var
   Icon:TBitmap;
begin
   if Column.DisplayName = 'ProjectStatus' then//'ProjectStatus' 为列名
  begin
    Icon:=TBitmap.Create;
    with TDBGridEh(Sender).Canvas do
    begin
      if adoQryFindProject.FieldByName('ProjectStatus').Value = 0 then
        img1.GetBitmap(0,Icon)
      else
        img1.GetBitmap(1,Icon);  //注意:一定要与imagelist中图片顺序一一对应,否则会张冠李戴,面目全非。
      Draw(round((Rect.Left+Rect.Right-Icon.Width)/2),Rect.Top,Icon);
    end;
    Icon.Free;
  end;
end;

你可能感兴趣的:(Delphi DBGRID中 根据不同的字段值显示不同的小图标)