Поскольку TDelphiTwain представляется компонентом, который вы создаете в коде, я бы рекомендовал передать nil для конструктора и вызвать метод .Free или (как предложил Джозеф) FreeAndNil.
Twain := TDelphiTwain.Create(nil);
try
try
Twain.OnTwainAcquire := TwainAcquireHandler; //manually set the event handler
Twain.OnSourceFileTransfer := TwainSourceFileTransfer;
Twain.OnSourceSetupFileXfer := TwainSourceSetupFileXfer;
Twain.LoadLibrary();
Twain.LoadSourceManager();
Twain.Source[0].Loaded := True;
Twain.Source[0].TransferMode := ttmFile;
Twain.Source[0].EnableSource(False, False);
except on e : exception do
showmessage('Error loading Scanner.');
end;
try
while Twain.Source[0].Enabled do
Application.ProcessMessages;
except on e : exception do
showmessage('Error Scanning Packing List.');
end;
Twain.Source[0].Loaded := False;
Twain.UnloadSourceManager(True);
Twain.UnloadLibrary();
finally
FreeAndNil(Twain);
end;
Я бы также рекомендовал улучшить обработку исключений, но это не относится к заданному вами вопросу. Единственное, что пользователи увидят и сообщат вам (или, что еще хуже, тихий парень в углу, ответственный за вашу ИТ-поддержку, который любит получать неописуемые ошибки от пользователей), это «Ошибка при выполнении чего-либо»
Удачи
Еще одна область, на которую следует обратить внимание, это если сканер поддерживает WIA (Windows Image Acquisition)
var
DevMgr: IDeviceManager;
Scanner: Idevice;
Picture: IItem;
Image: OleVariant;
AImage: IImageFile;
begin
DevMgr := CreateOleObject('WIA.DeviceManager') as IDeviceManager;
// Figure out which device is the scanner
Scanner:= DevMgr.DeviceInfos.Item[1].Connect;
//Command: Figure out which command scans..
Picture := Scanner.ExecuteCommand(Scanner.Commands.Item[1].CommandID);
//Transfer as JPG
Image := Picture.Transfer(Picture.Formats.Item[1]);
//Save the image
AImage := IImageFile(Image);
AImage.SaveFile('c:\wia_viaScanner\image.' + AImage.FileExtension);
end;
Более подробную информацию о библиотеке WIA можно найти здесь ..
http://msdn.microsoft.com/en-us/library/ms629859(VS.85).aspx