程序分按键执行没问题,但放到循环就出错,请帮分析下原因
通用过程
procedure TFormMain.OpenOneDev(iDevId: Integer);
var
Hr: Integer;
begin
if m_DoFlag[iDevId] then
begin
MessageBox(0, PChar('相机 '+IntToStr(iDevId)+' 已经打开!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//打开设备
Hr:= HV_OpenDevice(iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_OpenDevice 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//初始化设备
Hr:= HV_DevCapInit(iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_DevCapInit 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
Hr:= HV_SetExposureValue(3000,iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_SetExposureValue 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//设置去抖动的时间,该时间越短,触发采集输出就越快
Hr:= HV_SetSnapDebounceTime(20,iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_SetSnapDebounceTime 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//设置触发模式下的参数,第一个参数为相机输出的帧率,不能高于该相机固有帧率。
//第二个参数为一次触发获取几幅图像,该参数设为0时,则表示以第一个参数为帧率连续触发输出。
//第三个参数表示相机的对应网卡的ID号
HV_SetSnapTrigFreqImgCount(14,1,iDevId);
//设置回调函数
case iDevId of
0:HV_SetCallBack(@MyCallBackProc0,iDevId);
1:HV_SetCallBack(@MyCallBackProc1,iDevId);
2:HV_SetCallBack(@MyCallBackProc2,iDevId);
3:HV_SetCallBack(@MyCallBackProc3,iDevId);
end;
//设置采集模式,第一个参数:1:连续采集模式,0:触发模式
HV_SetPreviewSnapMode(0,1,iDevId);
HV_SetImageMirror(2,iDevId);
//设置SDK进入采集状态
HV_StartCapture(iDevId);
m_DoFlag[iDevId]:= True;
Label2.Caption:= '相机:'+IntToStr(iDevId);
end;
分三个按键执行,一个一个点,可以依次打开三个相机
procedure TFormMain.SpeedButton1Click(Sender: TObject);
begin
OpenOneDev(0);
// SpeedButton2.Click; //直接调用打开设备2的事件,还是会跳出来。。。
end;
procedure TFormMain.SpeedButton2Click(Sender: TObject);
begin
OpenOneDev(1); //单个打开,就可以
end;
procedure TFormMain.SpeedButton3Click(Sender: TObject);
begin
OpenOneDev(2);
end;
放到循环里,程序在执行到i=1的时候就会跳出来
procedure TFormMain.OpenDeviceBtnClick(Sender: TObject);
var
i: Integer;
begin
for i:=0 to 2 do
OpenOneDev(i);
end;
而且有时候还发现,for循环执行完i=0后,第二次进入的i不是1,而是一个很大的数值。
请帮忙分析分析什么原因啊
delphi 循环