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做了一个更好的例子
答案 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;