急!急!高手请进!!!

mouse12435 2007-06-30 08:46:21
本人对DELPHI不熟,遇到个小问题,望高手请进!万分感谢!

for j:=0 to DBGrid.DataSource.DataSet.RecordCount-1 do
begin
ret:=BitBlt(Printer.Canvas.Handle,SrcRect.Left,SrcRect.Top,SrcRect.Right
,SrcRect.Bottom, Bitmap.Canvas.Handle,0,0,SRCAND); //srcCopy
if ret_p=false then
begin
showmessage('打印图像失败,请重试!');
printer.Abort;
Dec(j);///这里报错,assignment to for-loop variable 'j'

continue;

end;
DBGrid.DataSource.DataSet.Next;

end;

Dec(j);///这里报错,assignment to for-loop variable 'j'

为什么这里会报错呢?先谢过!
...全文
218 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jethill 2007-06-30
  • 打赏
  • 举报
回复
完全同意楼上的说法。像上面所给的代码应该正确。
如果不用while循环,仍用for循环,不妨在循环中设置一个中间变量,然后将j和中间变量进行比较,如果不等,则不执行任何操作,否则执行。如下
i:=0;
for j:=0 to DBGrid.DataSource.DataSet.RecordCount-1 do
begin
if i=j then
begin
ret:=BitBlt(Printer.Canvas.Handle,SrcRect.Left,SrcRect.Top,SrcRect.Right
,SrcRect.Bottom, Bitmap.Canvas.Handle,0,0,SRCAND); //srcCopy
if ret_p=false then
begin
showmessage('打印图像失败,请重试!');
printer.Abort;
Dec(i);///这里报错,assignment to for-loop variable 'j'

continue;

end;
DBGrid.DataSource.DataSet.Next;

end
else
i:=j;
end;
jadeluo 2007-06-30
  • 打赏
  • 举报
回复
改成这样试试:

j := 0;
while j < DBGrid.DataSource.DataSet.RecordCount do
begin
ret:=BitBlt(Printer.Canvas.Handle,SrcRect.Left,SrcRect.Top,SrcRect.Right
,SrcRect.Bottom, Bitmap.Canvas.Handle,0,0,SRCAND); //srcCopy
if ret_p=false then
begin
showmessage('打印图像失败,请重试!');
printer.Abort;
end
else begin
DBGrid.DataSource.DataSet.Next;
inc (j);
end;
end;
jadeluo 2007-06-30
  • 打赏
  • 举报
回复
For循环的循环体中是不允许修改循环变量的值的。

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧