DelphiTwain:如何知道从送纸器扫描完成

时间:2013-08-16 08:46:49

标签: delphi twain

我正在使用TDelphiTwain组件进行扫描。当我从进纸器开始扫描时,所有扫描都是异步执行的,并且当新图像可供处理时触发事件OnTwainAcquire。但我找不到如何检查已完成扫描所有的douments。当进纸盘为空时,扫描停止,如果我将新纸张放入进纸器,则不进行处理。 所以我需要知道它已经完成,我可以处理收到的图像。 我可以检查喂食器是否为空,但我很容易错过(用我的支票)托盘空的时刻,因此应用程序会认为新图像即将到来,但他们没有。 我认为应该有这样的任务事件(StartSession / StopSession),但我找不到它。

代码中的

看起来像这样:

procedure TFormDemo.FormShow(Sender: TObject);
begin
  Twain := TTwainScanner.Create;
  Twain.OnTwainAcquire := Acquire;
  Twain.Source[SelectedDevice].SetFeederEnabled(True);
  Twain.Source[SelectedDevice].Enabled := True; // start
end;

procedure TFormDemo.Acquire(Sender: TObject; const Index: Integer;
  Bitmap: TBitmap; var Cancel: Boolean);
begin
  // some processing
  Cancel := False;
end;

我也捕获了OnAcquireProgress事件,但它是当前图像扫描的进展,并且无法知道扫描何时停止。

更新:我几乎找到了解决方案。当TTwainSource完成TWAIN事件的处理时,它为TTwainsource设置ENABLED = false。不幸的是,在OnTwainAcquire中,它仍然是True,后来变为False,并且没有我可以检查它的事件。像解决方法一样,我可以通过计时器检查它。

1 个答案:

答案 0 :(得分:0)

我在这里使用了DelphiTwain http://www.kluug.net/delphitwain.php 作者同意添加新事件,因此更新版本的库问题得以解决。