Использование принтера и печать документов достаточно частая задача в проектах на Delphi, связанных с различными формами. Поэтому для этой цели существует ряд компонентов, в том числе и стандартных.
Однако использование сканера как оказалось не совсем тривиальная задача. В одной проекте на Delphi мне понадобилось использовать сканер и получать изображения с него. При первом рассмотрении нашлось несколько решений:
- Использование ActiveX компонента Kodak Scan Image Control
- Использование компонента DelphiTwain
- Использование C++ библиотеки EZTwain Classic
Каждый из способов хорош по своему.
Использование ActiveX достаточно просто. В окне установи ActiveX компонента следует выбрать Kodak Scan Image Control и перекомпилировать пакет с компонентов.
В проекте использование будет выглядеть следующим образом. Сначала проверим доступность сканера (ScannerAvailable), затем открываем его (OpenScanner), указываем куда сканировать (ScanTo = 2 — в файл), наконец запускаем сканирование методом StartScan:
if ImgScan1.ScannerAvailable then
try
ImgScan1.OpenScanner;
ImgScan1.ScanTo := 2;
ImgScan1.Image:='c:\MyPicture.gif';
ImgScan1.StartScan ;
Application.ProcessMessages;
finally
ImgScan1.CloseScanner ;
end;
Из недостатков нужно отметить наличие компонента imgscan.ocx на целевых компьютерах, что традиционно для ActiveX.
Компонент DelphiTwain вполне удобен в работе имеет настройки. Домашняя страница проекта — http://delphitwain.sourceforge.net. После установки его традиционным образом и установки его на форму проекта сканирование запускается так:
procedure TForm1.Button1Click(Sender: TObject);
var
SourceIndex: Integer;
begin
//Пытамся загрузить библиотеку
if DelphiTwain1.LoadLibrary then
begin
//Аналогично SourceManangerLoaded := TRUE
DelphiTwain1.LoadSourceManager();
//Выбираем источник
SourceIndex := DelphiTwain1.SelectSource();
if SourceIndex <> -1 then
with DelphiTwain1.Source[SourceIndex] do
begin
//Подготавливаем для передачи данных используя режим ttmFile
Loaded := TRUE;
TransferMode := ttmFile;
Enabled := TRUE;
end
else
ShowMessage('Cancelled')
end
else ShowMessage('Twain не установлен')
end;
Однако, третий способ через библиотеку EZTwain Classic показался наиболее удобным и простым. Библиотека eztwain написана на C++, для нее существует заголовочный pas-файл на Delphi для подключения к проектам. Сам проект EZTwain является коммерческим и Pro версию необходимо покупать. Однако версия EZTwain Classic является бесплатной, потому что не предполагает поддержку и имеет ограниченный функционал по сравнению с Pro-версией. Чтобы подключить библиотеку к проекту нужно подключить этот файл и положить файл eztw32.dll в директорию проекта.
Диалог выбора сканера открывается следующим образом:
procedure TForm1.btSelectScanerClick(Sender: TObject);
begin
TWAIN_SelectImageSource(Handle);
end;
Непосредственно сканирование в файл запускаем так:
procedure TForm1.btScanClick(Sender: TObject);
begin
{Получаем указатель на графические данные}
TWAIN_RegisterApp(1, 1, 1049, 7, 'Название окна', 'Название организации', '', 'Имя приложения');
TWAIN_SetHideUI(Integer(True)); //скрываем интерфейс сканера
TWAIN_AcquireToFilename(Handle, PChar(ExtractFilePath(ParamStr(0))+'tmpscan.bmp'));
end;
Способ понравился тем, что нет необходимость устанавливать или регистрировать дополнительных библиотек. К проекту линкуется дополнительная библиотека, которая напрямую используется TWAIN.

PDF