内存流载入数据库中图像的奇怪问题请教(20分)

  • 主题发起人 主题发起人 foxgirl
  • 开始时间 开始时间
F

foxgirl

Unregistered / Unconfirmed
GUEST, unregistred user!
一个奇怪的问题请教:下面过程中ms是一个内存流数组,用于装入数据库中的图像,下面的代码已装入图像,但有一个关于high(ms)和数据库表记录总数-1 之间的差别问题想请教。

var
Formbase: TFormbase;
ms: Array of TmemoryStream;
j:integer;
implementation
..............
..............
procedure TFormbase.ImageEnDBView1Click(Sender: TObject);//这个过程用于显示流中前一幅图,可以正常运行,当处于流中第一幅图时,再单击一次,不会出现错误提示;
begin

if (j-1>=low(ms)) then
begin
j:=j-1;
ms[j].Position:=0;
formbase.ImageEndbView1.io.LoadFromStream( ms[j] );
end;

end;

procedure TFormbase.ImageEnDBView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);//这个过程用于显示流中后一幅图,可以正常显示,但当处于最后一张图时,再右击一次,就出现了地址错误提示
begin

if (button=mbright) and (j+1 <= high(ms) ) then
begin
j:=j+1;
ms[j].Position:=0;
formbase.ImageEndbView1.io.LoadFromStream( ms[j] );
end;

end;

但是把上面这个过程中的high(ms)不用high来表示,而改为数据库表的记录总数-1表示时又不会发出越界的寻址错误了,不知为何?
procedure TFormbase.ImageEnDBView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin

if (button=mbright) and (j+1 <= tinytable1.RecordCount -1 ) then
begin
j:=j+1;
ms[j].Position:=0;
formbase.ImageEndbView1.io.LoadFromStream( ms[j] );
end;

end;
 
没朋友帮忙看一下吗?
看起来很长,实际上很短的
 
没人解决,我如何付分?
 
你的ms元素个数大于tinytable1.RecordCount
 
你试过
ShowMessage( IntToStr( high(ms) ) );
没有?

var P : array of String;
begin
SetLength( P,100 );//如果没有这一句的话,上一句显示-1,下一句显示0
ShowMessage( IntToStr( High( P ) ) ); //显示99
ShowMessage( IntToStr( Low( P ) ) ); //显示0
end;
 
多人接受答案了。
 

Similar threads

后退
顶部