如何将dbgrid中某几格用图片代替?(66分)

  • 主题发起人 主题发起人 base7
  • 开始时间 开始时间
B

base7

Unregistered / Unconfirmed
GUEST, unregistred user!
而且图片必须将原来那格中的文章遮住。
我特地放了一个Timage用来存放源图片
然后在dbgrid的OnDrawColumnCell事件中判断后加:
代码:
1.    dbgrid1.Canvas.Brush.Bitmap:=image1.Picture.Bitmap;
2.    dbgrid1.Canvas.Draw(rect.Left, rect.Top, image1.Picture.Graphic);
3.    dbgrid1.canvas.copyrect(rect, image1.Picture.Bitmap.Canvas, rect);
可是好象都无效?
望大侠们不吝指点!
 
将defaultdrawing设为false 试试
 
DefaultDrawing当然已经设成False啦
我是想请大家看看究竟我的代码有什么问题?
 
改用stringgrid
 
不是吧?
它们是从同一个类继承下来的,对于画一幅画来说应该没有什么不同吧
 
DefaultDrawColumnCell没有忘吧?
 
代码:
dbgrid1.DefaultDrawColumnCell(Rect, DataCol, Column, State);
吗?
当然是已经加上的啦
 
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Bmp: TBitmap;
begin
DBGrid1.Canvas.FillRect(Rect);
if Column.Field = Table1Graphic then
begin
try
Bmp := TBitmap.Create;
Bmp.Assign(Table1Graphic);
DBGrid1.Canvas.StretchDraw(Rect,Bmp);
finally
Bmp.Free;
end;
end else
begin
// 其他操作
end;
end;

 
>>wcwcw:
你的这段程序应该是将数据库中的图片字段显示在dbgrid上,我在以前的帖子中看见过这段代码。
可是试了一下还是没成功,对应的格子显示为白色而不是图片,为什么呢?
诸位看看我的代码...
代码:
  grdFunds.Canvas.FillRect(Rect);
  with grdFunds.Canvas do
    if (Column.Field.AsInteger = 1) and (DataCol = 4) then
    try
      Bmp := TBitmap.Create;
      Bmp.Assign(image1.Picture.Bitmap);
      StretchDraw(Rect,Bmp);
    finally
      Bmp.Free;
    end;
  grdfunds.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
//连接DBDEMOS 下面的animals.dbf 我试过了没有问题的!
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Bmp: TBitmap;
begin
DBGrid1.Canvas.FillRect(Rect);
if Column.Field = Table1Bmp then //字段的名称
begin
try
Bmp := TBitmap.Create;
Bmp.Assign(Table1Bmp);
DBGrid1.Canvas.StretchDraw(Rect,Bmp);
finally
Bmp.Free;
end;
end else
begin
// 其他操作
end;
end;
 
with grdFunds.Canvas do
if (Column.Field.AsInteger = 1) and (DataCol = 4) then
try
Bmp := TBitmap.Create;
Bmp.Assign(image1.Picture.Bitmap);
~~~~~~~~~~~~~~~~~~~~~是这地方的问题!改成
bmp.Assign(image1.Picture.Graphic);
StretchDraw(Rect,Bmp);
finally
Bmp.Free;
end;
 
to 天真:
为什么呢?我用的图片的确是bmp格式的呀
而且我照你的改了,还是没成功啊?
现在的代码:
代码:
  grdFunds.Canvas.FillRect(Rect);
  with grdFunds.Canvas do
  begin
    if (Column.Field.AsInteger = 1) and (DataCol = 4) then
      StretchDraw(Rect,imgCheck.Picture.Graphic);
  end;
  grdfunds.DefaultDrawColumnCell(Rect, DataCol, Column, State);
 
DBGrid1DrawColumnCell被DBGrid1DrawDataCell给改回去了吧。在DBGrid1DrawDataCell中重复一边。
 
用DxdbGrid 3 你的所有问题都可以解决,
WWW.51DELPHI.COM有的下的
 
最简单的方法是换一个DBGRID,如WWDBGrid就可以了。
 
to wk_knife:
可是Column这个参数怎么办?

另外,我不想用第三方控件。不然我就不会这么问了
 
//grdfunds.DefaultDrawColumnCell(Rect, DataCol, Column, State);[/code]
这句去掉
 
to 天真:
谢谢你,去掉后的确显示图片了。
可是其他格子中的数据也不见了,这个如何是好?
 
虽然DBGRID从GRID继承而来,但加的东西太多,用起来十分束缚;
建议从STRINGGRID编起,也不是很麻烦,不然你的要求可能比较困难。
 
多人接受答案了。
 
后退
顶部