首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

程序分按键执行没有关问题,但放到循环就出错,请帮分析上原因

2013-03-16 
程序分按键执行没问题,但放到循环就出错,请帮分析下原因通用过程procedure TFormMain.OpenOneDev(iDevId:

程序分按键执行没问题,但放到循环就出错,请帮分析下原因
通用过程

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 循环

热点排行