0

我正在使用 TDelphiTwain 组件进行扫描。当我从进纸器开始扫描时,所有扫描都异步执行,当新图像可用于处理时触发事件 OnTwainAcquire。但我找不到如何检查所有文件的扫描是否已经完成。当进纸器托盘为空时,扫描停止,如果我将新纸放入进纸器,它不会处理它。所以我需要知道它已经完成并且我可以处理接收到的图像。我可以检查进纸器是空的,但我很容易错过(用我的检查)托盘是空的那一刻,所以应用程序会认为新图像即将到来,但他们没有。我想应该有这样的任务(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,并且没有我可以检查它的事件。像解决方法一样,我可以通过计时器检查它。

4

1 回答 1

0

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

于 2013-08-19T14:16:32.190 回答