スキャンに 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 になり、確認できるイベントはありません。回避策のように、タイマーで確認できます。