PDWglRecord = ^TDWglRecord;   
TDWglRecord= packed record
      ACol:longint;
      ARow:longint;
   end;
 TDWglAr=array[MINA..MAXA] of TDWglRecord;//gline:array[1..4,1..2] of integer;//画直线   
glcellx:TDWglAr;  for gi:=1 to 4 do    //////
   begin
     glcellx[gi].ACol:=gline[gi,2] + 2 ;
     glcellx[gi].ARow:=gline[gi,1];
     gdrid.DWLineA[gi]:= glcellx[gi];
     gline[gi,1]:=0;gline[gi,2]:=0;
   end;
   glx:=0; //如果加 gi:=5 怪了
   for gi:=5 to 8 do  //问题所在
      if gcell[gi,1] <>0 then begin
        glx:=glx+1;
        gline[glx,1]:=gcell[gi,1];
        gline[glx,2]:=gcell[gi,2];
       end;大家看上面的代码,真是奇怪了,我调试老是出错,到第2个for gi就等于 4 (明明这样了啊for gi:=5 to 8 do)
更奇怪的是 如果在其上家gi:=5;那么下来第二个for就是递减.郁闷,怪啊!大家测试一下看不是是啊上面那段代码我是写在一个函数中,变量申明我写在上面了,这2个for就是这样,中间没有其他代码.

解决方案 »

  1.   


    我这不是动态数组,我说的是变量gi在for中的问题,gi只是个integer变量,奇怪的是2个for一起的话并且变量名一样好象就出问题了,循环变量就出错,是不delphi编译器的问题啊,delphi7下测试的
      

  2.   

    我测试了你的代码,是DELPHI里的查看变量的BUG,程序结果是正确的。type
      PDWglRecord = ^TDWglRecord; 
      TDWglRecord = packed record
        ACol: longint;
        ARow: longint;
      end;
      TDWglAr = array[0..100] of TDWglRecord;procedure TFmMain.btn1Click(Sender: TObject);
    var
      gline: array[1..4,1..2] of Integer;//画直线
      glcellx: TDWglAr;
      gi, glx: Integer;
    begin
      glcellx[1].ACol := 100;
      glcellx[1].ARow := 100; 
      for gi:=1 to 4 do //////
      begin
      glcellx[gi].ACol:=gline[gi,2] + 2 ;
      glcellx[gi].ARow:=gline[gi,1];
      //gdrid.DWLineA[gi]:= glcellx[gi];
      gline[gi,1]:=0;gline[gi,2]:=0;
      end;
      glx:=0; //如果加 gi:=5 怪了
      for gi:=5 to 8 do //问题所在
      begin
        //if gcell[gi,1] <>0 then begin
        glx:=glx+1;
        //gline[glx,1]:=gcell[gi,1];
        //gline[glx,2]:=gcell[gi,2];
        //end;
      end;
    end;