Delphi使用静态数组定义的2d数组

时间:2016-04-28 02:37:41

标签: arrays delphi

 protected void OnTwainTransferReady()
            {
                if (TwainTransferReady == null)
                    return; // not likely..

                List<ImageSource> imageSources = new List<ImageSource>();
                ArrayList pics = tw.TransferPictures();
                tw.CloseSrc();
                EndingScan();
                picnumber++;
                for (int i = 0; i < pics.Count; i++) {
                    IntPtr imgHandle = (IntPtr)pics[i];
                    /*if (i == 0) { // first image only
                        imageSources.Add(DibToBitmap.FormHDib(imgHandle));
                        //Refresh(image1); // force a redraw
                    }*/
                    ImageSource src = DibToBitmap.FormHDib(imgHandle);
                    ImageSource temp = ImageHelper.compressImage(src);
                    src = null;
                    imageSources.Add(temp);
                    Win32.GlobalFree(imgHandle);
                }
                // for some reason the main window does not refresh properly - resizing of the window solves the proble.
                // happens only with the Canon LIDE Scanner
                // Suspected: some messages where eaten by Twain
                TwainTransferReady(this, imageSources);
            }

当我尝试使用Setlength()来定义2DArray的长度时,它没有给出任何错误或没有错误。

我希望结果是一个包含1000列和长度行数的数组。 但是,结果只有1行,包含1001列。

知道为什么吗?

我需要以这种方式定义数组,但我仍然坚持如何设置它的长度。

*编辑列数,0..1000,最多可添加1001列。

* Edit2修改了一些代码。

* Edit3做了一个更好的例子

1 个答案:

答案 0 :(得分:1)

我检查了您的代码,故意留下相同的ID Length。代码按预期工作:

procedure TForm1.Button20Click(Sender: TObject);
type
  StaticArray = Array[0..1000] of Double;
var
  DArray: Array of StaticArray;
  Length : Integer;
begin
  Length := 5;
  SetLength(DArray, Length);
  Caption := IntToStr(High(DArray)); //ouputs 4

  //note bad usage of Length var, so we can not use Length intrinsic function

  DArray[3, 1000] := 42;
end;