这个函数该怎么写?(100分)

  • 主题发起人 主题发起人 zoulin
  • 开始时间 开始时间
Z

zoulin

Unregistered / Unconfirmed
GUEST, unregistred user!
各位:
请教这个函数为何运行时老出错?

Image1.Picture.Graphic.Assign(readjpeg(table1,'graph'));

function readjpeg(tablename:ttable;fieldname:string):TJpegImage;
var
jpeg: TJpegImage; //Requires the "jpeg" unit added to "uses" clause.
Stream :TStringStream;
begin
//TBlobField(Table1.FieldByName('BITMAP')).BlobSize
jpeg:=tjpegimage.Create;
Stream:=TStringStream.Create(tablename.FieldByName(fieldname).value);
jpeg.loadfromstream(stream);
result:=jpeg;
jpeg.Free;
stream.Free;
end;
 
为什么用TSTRINGSTREAM 不用TBLOBSTREAM
 
是啊,是不是用TSTRINGSTREAM 的问题?
 
用TStringStream倒也可以,但是你的程序有两个错误:
1.
>>Image1.Picture.Graphic.Assign(readjpeg(table1,'graph'));
这一句不应该用Graphic,应该是Image1.Picture.Assign(readjpeg(table1,'graph'));
2.
>>...
>>result:=jpeg;
>>jpeg.Free;//你把Result指向的实际的东西都给释放了!
>>...
建议该函数这样写——
function readjpeg(tablename:ttable;fieldname:string):TJpegImage;
var
Stream :TStringStream;
begin
Stream:=TStringStream.Create(tablename.FieldByName(fieldname).value);
Result:=tjpegimage.Create;
Result.loadfromstream(stream);
stream.Free;
end;
然后调用的时候这样写——
var
j: TJpegImage;
begin
j := readjpeg(table1,'graph');
Image1.Picture.Assign(j);
j.Free;
end;
 
接受答案了.
 
后退
顶部