将image1中的图形保存到数据库中的问题已经解决,现将代码贴出来供大家参考。 现在的问题是如何在dbgrid中显示图像,或者有没有这方面的第三方控件,有的话请提供下载地址。 var a:TMemoryStream; begin a:=TMemoryStream.Create; Image1.canvas.pen.color:=clyellow; Image1.canvas.pen.width:=2; Image1.canvas.MoveTo(10,50); Image1.canvas.lineto(110,50); image1.Picture.Bitmap.SaveToStream(a); if not adotable1.Active then adotable1.Active:=true; adotable1.Append; (adotable1.FieldByName('PICT') as TBlobField).loadfromstream(a); adotable1.Post; end;再加50分寻求答案。
在DBGrid里显示图像,我用的是Delphi自带的表biolife.db代码如下: procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); var Bmp:TBitmap; OutRect:TRect; BmpWidth:Integer; begin OutRect:=Rect; if Column.Field=Table1Common_Name then begin Bmp:=TBitMap.Create; try Bmp.Assign(Table1Graphic); BmpWidth:=(Rect.Bottom-Rect.Top)*2; OutRect.Right:=Rect.Left+BmpWidth; DBGrid1.Canvas.StretchDraw(OutRect,Bmp); finally Bmp.Free; end; OutRect:=Rect; OutRect.Left:=OutRect.Left+BmpWidth; end; DBGrid1.DefaultDrawDataCell(OutRect,Column.Field,state); end;
Table1Common_Name 是一字段名
呵呵,我找到的方法和ysmstoneman(迪蜚)是一样的:在DBGrid的OnDrawColumnCell事件中加入如下代码即可实现在DBGrid中显示图形 var Bmp : TBitmap; R : TRect; begin if DataCol=1 then //这里是图形字段所在的列 begin Bmp:=TBitmap.Create; Bmp.Assign(Column.Field); DBGrid1.Canvas.StretchDraw(Rect, Bmp); Bmp.free; end; end;扩展:只要重新修改DBGrid的OnDrawColumnCell事件,加入判断是否是图形字段或是BLOB 字段,然后封装起来,就是一个可以显示图形的DBGrid控件了,同样还可以扩展到Memo字段等。
1 access可否保存image类型的字段,及如何存取(可以保存,字段类型设为?忘了)
2 如何在dbgrid中显示图像(重写ondrawcell是不是太笨了)
3 前期绑定image字段用什么控件(image)扩展:
如何将wave,rm文件存进access并能浏览?
小弟只是将如上问题绕过了而已,并没解决这些问题。
敬请专业的答复---赤狼风云,给分不要小气,这个问题我认为可以给100分。
各位有解的我将另付80分。
现在的问题是如何在dbgrid中显示图像,或者有没有这方面的第三方控件,有的话请提供下载地址。
var
a:TMemoryStream;
begin
a:=TMemoryStream.Create;
Image1.canvas.pen.color:=clyellow;
Image1.canvas.pen.width:=2;
Image1.canvas.MoveTo(10,50);
Image1.canvas.lineto(110,50); image1.Picture.Bitmap.SaveToStream(a); if not adotable1.Active then
adotable1.Active:=true;
adotable1.Append;
(adotable1.FieldByName('PICT') as TBlobField).loadfromstream(a);
adotable1.Post;
end;再加50分寻求答案。
2,在Delphi中用TPicture类、TstringStream类与TAdoTable类写入数据库
例子:
Var
Picture:TPicture;
Stream:TStringStream;
Table:TAdoTable;
begin
Picture:=TPicture.Create;
Picture.LoadFromFile('Test.BMP');
Stream:=TStringStream.Create('');
Picture.Bitmap.SaveToStream(Stream);
Table:=TAdoTable.Create(Nil);
Table.ConnectionString:='......';
Table.TableName:='Test';
Table.Open;
Table.Append;
Table.FieldByName('Picture').AsString:=Stream.DataString;
Table.Post;
Table.Close;
Table.Free;
STream.Free;
Picture.Free;
end;
3,显示
将以上操作反过来进行,将Tpicture类赋予一个定义好的TImage类或者直接使用TDBImage类进行显示就可以了
ACCESS当然那可以存图片了
procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
var
Bmp:TBitmap;
OutRect:TRect;
BmpWidth:Integer;
begin
OutRect:=Rect; if Column.Field=Table1Common_Name then
begin
Bmp:=TBitMap.Create;
try
Bmp.Assign(Table1Graphic);
BmpWidth:=(Rect.Bottom-Rect.Top)*2;
OutRect.Right:=Rect.Left+BmpWidth;
DBGrid1.Canvas.StretchDraw(OutRect,Bmp);
finally
Bmp.Free;
end;
OutRect:=Rect;
OutRect.Left:=OutRect.Left+BmpWidth;
end;
DBGrid1.DefaultDrawDataCell(OutRect,Column.Field,state);
end;
var
Bmp : TBitmap;
R : TRect;
begin
if DataCol=1 then //这里是图形字段所在的列
begin
Bmp:=TBitmap.Create;
Bmp.Assign(Column.Field);
DBGrid1.Canvas.StretchDraw(Rect, Bmp);
Bmp.free;
end;
end;扩展:只要重新修改DBGrid的OnDrawColumnCell事件,加入判断是否是图形字段或是BLOB
字段,然后封装起来,就是一个可以显示图形的DBGrid控件了,同样还可以扩展到Memo字段等。