我正在使用 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,并且没有我可以检查它的事件。像解决方法一样,我可以通过计时器检查它。