TWAIN_AbortAllPendingXfers - Process messages until termination, source disable, or image transfer.
TWAIN_AcquireNative - EZTW32.
TWAIN_AcquireToClipboard - Release the memory allocated to a native format image, as returned by TWAIN_AcquireNative.
TWAIN_AcquireToFilename - Like AcquireNative, but puts the resulting image, if any, into the system clipboard.
TWAIN_CloseSource - Disables the open Data Source, if any.
TWAIN_CloseSourceManager - Closes the open Data Source, if any.
TWAIN_CreateDibPalette - Number of colors in color table of DIB
TWAIN_DibDepth - image in transit } { --------- DIB handling utilities ---------
TWAIN_DibHeight - Width of DIB, in pixels (columns
TWAIN_DibNumColors - Height of DIB, in lines (rows
TWAIN_DibWidth - Depth of DIB, in bits i.
TWAIN_DisableSource - Enables the open Data Source.
TWAIN_DrawDibToDC - Create and return a logical palette to be used for drawing the DIB.
TWAIN_DS - Do a DAT_CAPABILITY/MSG_GETCURRENT on capability 'Cap'.
TWAIN_EasyVersion - Call this function any time to find out if TWAIN is installed on the system.
TWAIN_EnableSource - This opens the source selected in the Select Source dialog.
TWAIN_FreeNative - any of the above
TWAIN_GetBitDepth - Set the current unit of measure for the source.
TWAIN_GetCapCurrent - Do a DAT_CAPABILITY/MSG_SET, on capability 'Cap' (e.
TWAIN_GetConditionCode - Return the result code (TWRC_xxx) from the last triplet sent to TWAIN
TWAIN_GetCurrentResolution - (Try to) set the current pixel type for acquisition.
TWAIN_GetCurrentUnits - Negotiate with the source to restrict pixel types that can be acquired.
TWAIN_GetHideUI -
TWAIN_GetPixelType - (Try to) set the current bitdepth (for the current pixel type).
TWAIN_GetResultCode - These functions control the 'hide source user interface' flag.
TWAIN_IsAvailable - This is the routine to call when the user chooses the "Select Source.
TWAIN_LoadNativeFromFile - Load a .
TWAIN_LoadNativeFromFilename - Writes a DIB to a file in .
TWAIN_LoadSourceManager - Return the condition code from the last triplet sent to TWAIN.
TWAIN_MessageHook - Unloads the Data Source Manager i.
TWAIN_Mgr - Passes the triplet (DG, DAT, MSG, pData) to the open data source if any.
TWAIN_ModalEventLoop - This function detects Windows messages that should be routed to an enabled Data Source, and picks them off.
TWAIN_NegotiatePixelTypes - Negotiate with open Source the number of images application will accept.
TWAIN_NegotiateXferCount - Writes a DIB to a file in .
TWAIN_OpenDefaultSource - Opens the Data Source Manager, if not already open.
TWAIN_OpenSourceManager - Finds and loads the Data Source Manager, TWAIN.
TWAIN_RegisterApp - Like LoadNativeFromFilename, but takes an already open file handle.
TWAIN_SelectImageSource - Acquire an image and write it to a .
TWAIN_SetBitDepth - Get the current bitdepth, which can depend on the current PixelType.
TWAIN_SetCapOneValue - (Try to) set the current resolution for acquisition.
TWAIN_SetCurrentPixelType - Ask the source for the current pixel type.
TWAIN_SetCurrentResolution - Ask the source for the current resolution.
TWAIN_SetCurrentUnits - Ask the source what its current unit of measure is.
TWAIN_SetHideUI - TWAIN_RegisterApp can be called *AS THE FIRST CALL*, to register the application.
TWAIN_State - Returns the version number of EZTWAIN.
TWAIN_UnloadSourceManager - Closes the Data Source Manager, if it is open.
TWAIN_WriteDibToFile -
TWAIN_WriteNativeToFile - Writes a DIB handle to a .
TWAIN_WriteNativeToFilename - Draws a DIB on a device context.
TWAIN_ANYTYPE
TWAIN_BW
TWAIN_GRAY
TWAIN_PALETTE
TWAIN_PRESESSION
TWAIN_RGB
TWAIN_SM_LOADED
TWAIN_SM_OPEN
TWAIN_SOURCE_ENABLED
TWAIN_SOURCE_OPEN
TWAIN_TRANSFERRING
TWAIN_TRANSFER_READY
Function TWAIN_AbortAllPendingXfers: Integer;
Process messages until termination, source disable, or image transfer. // Executes exactly the sample code given above for TWAIN_MessageHook, but terminates as soon as the source is disabled or a transfer completes. This function is called by TWAIN_AcquireNative.
Function TWAIN_AcquireNative(HwndApp: HWND; wPixTypes: Cardinal): HBitmap;
EZTW32.PAS - Translation of EZTWAIN.H C header file. Translated for Marcelo Gomes da Costa (mgc@cwb.matrix.com.br) in December,12, 1997 This pascal file is freeware. If anyone needs it, please give it to him, but don't clear my credits. I only use the basic stuff. If anybody find errors or change this file, please, send me a copy. // // Basic Stuff: EZTWAIN.H - interface to Easy TWAIN library // EZTWAIN is not a product, and is not the work of any company involved in promoting or using the TWAIN standard. This code is sample code, provided without charge, and you use it entirely at your own risk. No rights or ownership is claimed by the author, or by any company or organization. There are no restrictions on use or (re)distribution. // 0.0 05/11/94 created 1.0a 06/23/94 first alpha version 1.04 05/03/95 added: WriteNativeToFile, WriteNativeToFilename, FreeNative, SetHideUI, GetHideUI, SetCurrentUnits, GetCurrentUnits, SetCurrentResolution, SetBitDepth, SetCurrentPixelType, SetCapOneValue. 1.05 11/06/96 32-bit conversion 1.06 08/21/97 correction to message hook, fixed 32-bit exports Passes a triplet to the Data Source Manager (DSM). Returns 1 (TRUE) if the result code is TWRC_SUCCESS, 0 (FALSE) otherwise. The last result code can be retrieved with TWAIN_GetResultCode(), and the corresponding condition code can be retrieved with TWAIN_GetConditionCode(). If the Source Manager is not open, this call will fail, and set the result code to TWRC_FAILURE, with a condition code of TWCC_SEQERROR (triplet out of sequence).
Function TWAIN_AcquireToClipboard(HwndApp: HWND; wPixTypes: Cardinal): Integer;
Release the memory allocated to a native format image, as returned by TWAIN_AcquireNative. (If you are coding in C or C++, this is just a call to GlobalFree.) If you use TWAIN_AcquireNative and don't free the returned image handle, it stays around taking up Windows (virtual) memory until your application terminates. Memory required per square inch: 1 bit B&W 8-bit grayscale 24-bit color 100 dpi 1.25KB 10KB 30KB 200 dpi 5KB 40KB 120KB 300 dpi 11.25KB 90KB 270KB 400 dpi 20KB 160KB 480KB //
Function TWAIN_AcquireToFilename(HwndApp: HWND; pszFile: PChar): Integer;
Like AcquireNative, but puts the resulting image, if any, into the system clipboard. Under Windows, this will put a CF_DIB item in the clipboard if successful. If this call fails, the clipboard is either empty or contains the old contents. A return value of 1 indicates success, 0 indicates failure. // Useful for environments like Visual Basic where it is hard to make direct use of a DIB handle. In fact, TWAIN_AcquireToClipboard uses TWAIN_AcquireNative for all the hard work.
Function TWAIN_CloseSource: Integer;
Disables the open Data Source, if any. This closes the source's user interface. If there is not an enabled source, does nothing and returns TRUE.
Function TWAIN_CloseSourceManager(hwnd: HWND): Integer;
Closes the open Data Source, if any. If the source is enabled, disables it first. If there is not an open source, does nothing and returns TRUE.
Function TWAIN_CreateDibPalette(Hdib: HBitmap): HPalette;
Number of colors in color table of DIB
Function TWAIN_DibDepth(Hdib: HBitmap): Integer;
image in transit } { --------- DIB handling utilities ---------
Function TWAIN_DibHeight(HDib: HBitmap): Integer;
Width of DIB, in pixels (columns
Function TWAIN_DibNumColors(Hdib: HBitmap): Integer;
Height of DIB, in lines (rows
Function TWAIN_DibWidth(HDib: HBitmap): Integer;
Depth of DIB, in bits i.e. bits per pixel.
Function TWAIN_DisableSource: Integer;
Enables the open Data Source. This posts the source's user interface and allows image acquisition to begin. If the source is already enabled, this call does nothing and returns TRUE.
Procedure TWAIN_DrawDibToDC(
Hdc: HDC; // destination device context
Dx, Dy, // destination (x,y)
W, H: Integer; // width and height
HDib: HBitmap; // DIB handle
Sx, Sy: Integer // source (x,y) in DIB
);
Create and return a logical palette to be used for drawing the DIB. For 1, 4, and 8-bit DIBs the palette contains the DIB color table. For 24-bit DIBs, a default halftone palette is returned.
Function TWAIN_DS(DG, DAT, MSG: Cardinal; pData: Pointer): Integer;
Do a DAT_CAPABILITY/MSG_GETCURRENT on capability 'Cap'. Copy the current value out of the returned container into *pVal. If the operation fails (the source refuses the request), or if the container is not a ONEVALUE or ENUMERATION, or if the item type of the returned container is incompatible with the expected TWTY_ type in nType, returns FALSE. If this function returns FALSE, *pVal is not touched. --------- Lowest-level functions for TWAIN protocol --------
Function TWAIN_EasyVersion: Integer;
Call this function any time to find out if TWAIN is installed on the system. It takes a little time on the first call, after that it's fast, just testing a flag. It returns 1 if the TWAIN Source Manager is installed & can be loaded, 0 otherwise.
Function TWAIN_EnableSource(hwnd: HWND): Integer;
This opens the source selected in the Select Source dialog. If a source is already open, does nothing and returns TRUE. Fails if the source manager is not loaded and open.
Procedure TWAIN_FreeNative(Hdib: HBitmap);
any of the above
Function TWAIN_GetBitDepth: Integer;
Set the current unit of measure for the source. Unit of measure codes are in TWAIN.H, but TWUN_INCHES is 0.
Function TWAIN_GetCapCurrent(Cap, ItemType: Cardinal; pVal: Pointer): Integer;
Do a DAT_CAPABILITY/MSG_SET, on capability 'Cap' (e.g. ICAP_PIXELTYPE, CAP_AUTOFEED, etc.) using a TW_ONEVALUE container with the given item type and value. Obviously, the item value must fit into 32 bits. Returns TRUE (1) if successful, FALSE (0) otherwise.
Function TWAIN_GetConditionCode: Cardinal;
Return the result code (TWRC_xxx) from the last triplet sent to TWAIN
Function TWAIN_GetCurrentResolution: Double;
(Try to) set the current pixel type for acquisition. This is only allowed in State 4 (TWAIN_SOURCE_OPEN) The source may select this pixel type, but don't assume it will.
Function TWAIN_GetCurrentUnits: Integer;
Negotiate with the source to restrict pixel types that can be acquired. This tries to restrict the source to a *set* of pixel types, See TWAIN_AcquireNative above for some mask constants. --> This is only allowed in State 4 (TWAIN_SOURCE_OPEN) A parameter of 0 (TWAIN_ANYTYPE) causes no negotiation & no restriction. You should not assume that the source will honor your restrictions, even if this call succeeds!
Function TWAIN_GetHideUI: Integer;
Function TWAIN_GetPixelType: Integer;
(Try to) set the current bitdepth (for the current pixel type).
Function TWAIN_GetResultCode: Cardinal;
These functions control the 'hide source user interface' flag. This flag is cleared initially, but if you set it non-zero, then when a source is enabled it will be asked to hide its user interface. Note that this is only a request - some sources will ignore it! This affects AcquireNative, AcquireToClipboard, and EnableSource. If the user interface is hidden, you will probably want to set at least some of the basic acquisition parameters yourself - see SetCurrentUnits, SetBitDepth, SetCurrentPixelType and SetCurrentResolution below.
Function TWAIN_IsAvailable: Integer;
This is the routine to call when the user chooses the "Select Source..." menu command from your application's File menu. Your app has one of these, right? The TWAIN spec calls for this feature to be available in your user interface, preferably as described. Note: If only one TWAIN device is installed on a system, it is selected automatically, so there is no need for the user to do Select Source. You should not require your users to do Select Source before Acquire. // This function posts the Source Manager's Select Source dialog box. It returns after the user either OK's or CANCEL's that dialog. A return of 1 indicates OK, 0 indicates one of the following: a) The user cancelled the dialog b) The Source Manager found no data sources installed c) There was a failure before the Select Source dialog could be posted -- details -- Only sources that can return images (that are in the DG_IMAGE group) are displayed. The current default source will be highlighted initially. In the standard implementation of "Select Source...", your application doesn't need to do anything except make this one call. // If you want to be meticulous, disable your "Acquire" and "Select Source" menu items or buttons if TWAIN_IsAvailable() returns 0 - see below. { --------- Basic TWAIN Inquiries ---------
Function TWAIN_LoadNativeFromFile(fh: HFile): HBitmap;
Load a .BMP file and return a DIB handle (as from AcquireNative.) Accepts a filename (including path & extension). If pszFile is NULL or points to a null string, the user is prompted. Returns a DIB handle if successful, otherwise NULL.
Function TWAIN_LoadNativeFromFilename(pszFile: PChar): HBitmap;
Writes a DIB to a file in .BMP format. // hdib = DIB handle, as returned by TWAIN_AcquireNative fh = file handle, as returned by _open, _lopen or OpenFile // Return value as for TWAIN_WriteNativeToFilename
Function TWAIN_LoadSourceManager: Integer;
Return the condition code from the last triplet sent to TWAIN. (To be precise, from the last call to TWAIN_DS below) If a source is NOT open, return the condition code of the source manager.
Function TWAIN_MessageHook(lpmsg: PMSG): Integer;
Unloads the Data Source Manager i.e. TWAIN.DLL - releasing any associated memory or resources. This call will fail if the Source Manager is open, otherwise it always succeeds and returns TRUE.
Function TWAIN_Mgr(DG, DAT, MSG: Cardinal; pData: Pointer): Integer;
Passes the triplet (DG, DAT, MSG, pData) to the open data source if any. Returns 1 (TRUE) if the result code is TWRC_SUCCESS, 0 (FALSE) otherwise. The last result code can be retrieved with TWAIN_GetResultCode(), and the corresponding condition code can be retrieved with TWAIN_GetConditionCode(). If no source is open this call will fail, result code TWRC_FAILURE, condition code TWCC_NODS.
Procedure TWAIN_ModalEventLoop;
This function detects Windows messages that should be routed to an enabled Data Source, and picks them off. In a full TWAIN app, TWAIN_MessageHook is called inside the main GetMessage loop. The skeleton code looks like this: MSG msg; while (GetMessage((LPMSG)&msg, NULL, 0, 0)) { if (!TWAIN_MessageHook ((LPMSG)&msg)) { TranslateMessage ((LPMSG)&msg); DispatchMessage ((LPMSG)&msg); } } // while
Function TWAIN_NegotiatePixelTypes(wPixTypes: Cardinal): Integer;
Negotiate with open Source the number of images application will accept. This is only allowed in State 4 (TWAIN_SOURCE_OPEN) nXfers = -1 means any number
Function TWAIN_NegotiateXferCount(nXfers: Integer): Integer;
Writes a DIB to a file in .BMP format. Returns TRUE if successful, FALSE otherwise. (Likely causes of failure: device full, or permission denied to write to file or device lpDIB = pointer to DIB, as from GlobalLock of DIB handle fh = file handle, as returned by C _open or Windows _lopen or OpenFile For example of use, see TWAIN_WriteNativeToFilename in EZTWAIN.C
Function TWAIN_OpenDefaultSource: Integer;
Opens the Data Source Manager, if not already open. If the Source Manager is already open, does nothing and returns TRUE. This call will fail if the Source Manager is not loaded.
Function TWAIN_OpenSourceManager(hwnd: HWND): Integer;
Finds and loads the Data Source Manager, TWAIN.DLL. If Source Manager is already loaded, does nothing and returns TRUE. This can fail if TWAIN.DLL is not installed (in the right place), or if the library cannot load for some reason (insufficient memory?) or if TWAIN.DLL has been corrupted.
Procedure TWAIN_RegisterApp(// record application information
nMajorNum, nMinorNum, // major and incremental revision of application. E.g.
// for version 2.1, nMajorNum == 2 and nMinorNum == 1
Language, // language of this version (use TWLG_xxx from TWAIN.H)
nCountry: Integer;// country of this version (use TWCY_xxx from TWAIN.H)
lpszVersion,// version info string e.g. "1.0b3 Beta release"
lpszMfg,// name of manufacturer/developer e.g. "Crazbat Software"
lpszFamily,// product family e.g. "BitStomper"
lpszProduct: PChar);
Like LoadNativeFromFilename, but takes an already open file handle. --------- Application Registration
Function TWAIN_SelectImageSource(hwnd: HWND): Integer;
Acquire an image and write it to a .BMP (Windows Bitmap) file. The file name and path in pszFile are used. If pszFile is NULL or points to an empty string, the user is prompted with a Save File dialog. Return values: -1 means the Acquire failed. 0 means the Save failed (or was cancelled) 1 indicates success.
Function TWAIN_SetBitDepth(nBits: Integer): Integer;
Get the current bitdepth, which can depend on the current PixelType. Bit depth is per color channel e.g. 24-bit RGB has bit depth 8. If anything goes wrong, this function returns 0.
Function TWAIN_SetCapOneValue(Cap, ItemType: Cardinal; ItemVal: LongInt): Integer;
(Try to) set the current resolution for acquisition. Resolution is in dots per current unit! (See TWAIN_GetCurrentUnits above) This is only allowed in State 4 (TWAIN_SOURCE_OPEN) Note: The source may select this resolution, but don't assume it will. --------- Low-level capability negotiation functions -------- Setting a capability is valid only in State 4 (TWAIN_SOURCE_OPEN) Getting a capability is valid in State 4 or any higher state.
Function TWAIN_SetCurrentPixelType(nPixType: Integer): Integer;
Ask the source for the current pixel type. If anything goes wrong (it shouldn't), this function returns 0 (TWPT_BW).
Function TWAIN_SetCurrentResolution(dRes: Double): Integer;
Ask the source for the current resolution. Resolution is in dots per current unit! (See TWAIN_GetCurrentUnits above) If anything goes wrong (it shouldn't) this function returns 0.0
Function TWAIN_SetCurrentUnits(nUnits: Integer): Integer;
Ask the source what its current unit of measure is. If anything goes wrong, this function just returns TWUN_INCHES (0).
Procedure TWAIN_SetHideUI(fHide: Integer);
TWAIN_RegisterApp can be called *AS THE FIRST CALL*, to register the application. If this function is not called, the application is given a 'generic' registration by EZTWAIN. Registration only provides this information to the Source Manager and any sources you may open - it is used for debugging, and (frankly) by some sources to give special treatment to certain applications. --------- Lower-level functions for greater control of the TWAIN protocol --------
Function TWAIN_State: Integer;
Returns the version number of EZTWAIN.DLL, multiplied by 100. So e.g. version 2.01 will return 201 from this call.
Function TWAIN_UnloadSourceManager: Integer;
Closes the Data Source Manager, if it is open. If a source is open, disables and closes it as needed. If the Source Manager is not open, does nothing and returns TRUE.
Function TWAIN_WriteDibToFile(lpDIB: PBITMAPINFOHEADER; fh: HFile): Integer;
Function TWAIN_WriteNativeToFile(hDib: HBitmap; fh: HFile): Integer;
Writes a DIB handle to a .BMP file // hdib = DIB handle, as returned by TWAIN_AcquireNative pszFile = far pointer to NUL-terminated filename If pszFile is NULL or points to a null string, prompts the user for the filename with a standard file-save dialog. // Return values: 0 success -1 user cancelled File Save dialog -2 file open error (invalid path or name, or access denied) -3 (weird) unable to lock DIB - probably an invalid handle. -4 writing BMP data failed, possibly output device is full
Function TWAIN_WriteNativeToFilename(Hdib: HBitmap; pszFile: PChar): Integer;
Draws a DIB on a device context. You should call CreateDibPalette, select that palette into the DC, and do a RealizePalette(hDC) first. { --------- BMP file utilities ---------
TWAIN_ANYTYPE = 0
1,4, or 8-bit palette (== TWPT_PALETTE)
TWAIN_BW = 1
The minimal use of EZTWAIN.DLL is to just call this routine, with 0 for both params. EZTWAIN creates a window if hwndApp is 0. // Acquires a single image, from the currently selected Data Source, using Native-mode transfer. It waits until the source closes (if it's modal) or forces the source closed if not. The return value is a handle to the acquired image. Only one image can be acquired per call. // Under Windows, the return value is a global memory handle - applying GlobalLock to it will return a (huge) pointer to the DIB, which starts with a BITMAPINFOHEADER. NOTE: You are responsible for disposing of the returned DIB - these things can eat up your Windows memory fast! See TWAIN_FreeNative below. // The image type can be restricted using the following masks. A mask of 0 means 'any pixel type is welcome'. Caution: You should not assume that the source will honor a pixel type restriction! If you care, check the parameters of the DIB.
TWAIN_GRAY = 2
1-bit per pixel, B&W (== TWPT_BW)
TWAIN_PALETTE = 8
24-bit RGB color (== TWPT_RGB)
TWAIN_PRESESSION = 1
Returns the TWAIN Protocol State per the spec.
TWAIN_RGB = 4
1,4, or 8-bit grayscale (== TWPT_GRAY)
TWAIN_SM_LOADED = 2
source manager not loaded
TWAIN_SM_OPEN = 3
source manager loaded
TWAIN_SOURCE_ENABLED = 5
source open but not enabled
TWAIN_SOURCE_OPEN = 4
source manager open
TWAIN_TRANSFERRING = 7
image ready to transfer
TWAIN_TRANSFER_READY = 6
source enabled to acquire