?»??»?unit HCT; interface uses Windows; Type HCTERR = DWORD; Type PFNHCTNOTIFY = Procedure(nNotify: Uint; dwData: DWORD); stdcall; function HCT_MAKEVERSION(Major, Minor, Build: integer): Cardinal; Const HCT_VERSION = (1 shl 19) + (1 shl 16) + (19 shl 8); // Port specfications Const HCT_PORT_USB = $FFFFFFFF; // ­́¬° ((unsigned) -1); Const HCT_PORT_NONE = $0; Const HCT_PORT_COM1 = $1; Const HCT_PORT_COM2 = $2; Const HCT_PORT_COM3 = $3; Const HCT_PORT_COM4 = $4; Const HCT_PORT_COM5 = $5; Const HCT_PORT_COM6 = $6; Const HCT_PORT_COM7 = $7; Const HCT_PORT_COM8 = $8; function HCT_ISPENEVENT(x: Integer): Boolean; // Event related macros Const HCT_EVT_PENEVENTS_BEGIN = $0001; Const HCT_EVT_PENDOWN = $0001; Const HCT_EVT_PENMOVE = $0002; Const HCT_EVT_PENUP = $0003; Const HCT_EVT_PENEVENTS_END = $0007; Const HCT_EVT_LOWSIGNAL = $0008; Const HCT_EVT_COLOR = $0009; Const HCT_EVT_BATTERYSTATUS = $0010; Const HCT_EVT_VBUTTONDOWN = $0011; Const HCT_EVT_CONNECT = $0012; Const HCT_EVT_DISCONNECT = $0013; Const HCT_EVT_LOSTFOCUS = $0014; Const HCT_EVT_SETFOCUS = $0015; Const HCT_EVT_PORTCHANGED = $0016; Const HCT_EVT_MNTINDRAWING = $0017; // HctPortOpen Flags Const HCT_PORTOPENFLAG_AUTODETECT = $100; Const HCT_PORTOPENFLAG_LASTPORT = $200; // Get/Set Parameters Const HCT_PARAM_VBUTTON = $001; // Virtual Button enable Const HCT_PARAM_PORT = $002; // Used port Const HCT_PARAM_BATTERYSTATUS = $003; // Battery Status Const HCT_PARAM_FIRMWARE = $004; // Firmware version // HCT_EVT_BATTERYSTATUS XPos Parameter Const HCT_BS_LOW = $00; Const HCT_BS_NORMAL = $0F; // Set Parameters values Const HCT_PARAM_ENABLEVBUTTONS = 1; Const HCT_ERR_SEVERITY = $c00000000; // ­́¬° ((ULONG) 3 << 30) // Bits 30 and 31 Const HCT_ERR_FACILITY = $100; Const HCT_ERR_CUSTOMBIT = $200000000; // ­́¬° ((ULONG) 1 << 29) // Bit 29 Const HCT_ERR_BASE = ($1000000 or HCT_ERR_CUSTOMBIT or HCT_ERR_SEVERITY); // Error Codes Const HCT_ERR_SUCCESS = $0; Const HCT_ERR_GENERALERROR = (HCT_ERR_BASE + $00); Const HCT_ERR_INVALIDPARAM = (HCT_ERR_BASE + $01); Const HCT_ERR_UNABLETOOPENPORT = (HCT_ERR_BASE + $02); Const HCT_ERR_SERVERNOTRESPONDING = (HCT_ERR_BASE + $03); Const HCT_ERR_PORTALREADYOPEN = (HCT_ERR_BASE + $04); Const HCT_ERR_INSUFFICIENTBUFFERSIZE= (HCT_ERR_BASE + $05); Const HCT_ERR_UNSUPPORTEDDEVICEFOUND= (HCT_ERR_BASE + $06); Const HCT_ERR_MNTINDRAWING = (HCT_ERR_BASE + $07); Const HCT_ERR_USERCANCELED = (HCT_ERR_BASE + $08); Const HCT_ERR_NOTINITIALIZED = (HCT_ERR_BASE + $09); Const HCT_ERR_NOMOREEVENTS = (HCT_ERR_BASE + $40); Const HCT_WRN_HARDWARENOTDETECTED = (HCT_ERR_BASE + $81); Const HCT_ERR_NOTSUPPORTED = (HCT_ERR_BASE + $FF); // Smoothing (HCTSmoothStroke() flags) Const HCT_SMOOTH_IIR = 1; Const HCT_SMOOTH_ADDDOTS = 2; Const HCT_SMOOTH_BIGXY = 4; Const HCT_SMOOTH_BEST = (HCT_SMOOTH_IIR or HCT_SMOOTH_ADDDOTS or HCT_SMOOTH_BIGXY); // For future use: Do not use _ALL, Use HCT_SMOOTH_BEST to apply best result. Const HCT_SMOOTH_ALL = (HCT_SMOOTH_IIR or HCT_SMOOTH_ADDDOTS or HCT_SMOOTH_BIGXY); // Denotes an invalid Receiver ID number Const RID_INVALID = $FFFFFFFF; // ­́¬° ((RECEIVERID) (-1)) Type PHCTRECEIVER = ^THCTRECEIVER; THCTRECEIVER = Record dwSize: DWORD; dwFlags: DWORD; Reserved1: DWORD; Reserved2: DWORD; pfnHCTNotify: PFNHCTNOTIFY; uMessage: DWORD; hWnd: HWND; end; Type PHCTEVENT = ^THCTEVENT; THCTEVENT = Record uEvent: WORD; //­́¬°USHORT XPos : SmallInt;//­́¬° SHORT YPos : SmallInt;//­́¬° SHORT end; Type PHCTVERSION_V1 = ^THCTVERSION_V1; THCTVERSION_V1 = Record dwSize: DWORD; // IN Set to sizeof(HCTVERSION) dwHctVer: DWORD; // OUT HCTVersion dwProductId: DWORD; // OUT Product Identifier dwFirmwareVer: DWORD; // OUT Firmware Version dwPadVer: DWORD; // OUT PCNTPad Version end; Type PHCTVERSION_V2 = ^THCTVERSION_V2; THCTVERSION_V2 = Record dwSize: DWORD; // IN Set to sizeof(HCTVERSION) dwHctVer: DWORD; // OUT HCTVersion dwProductId: DWORD; // OUT Product Identifier dwFirmwareVer: DWORD; // OUT Firmware Version dwPadVer: DWORD; // OUT PCNTPad Version dwAnalogProductId: DWORD; // OUT Analog Product Identifier dwAnalogFirmwareVer:DWORD; // OUT Analog Version end; Type HCTVERSION = THCTVERSION_V2; Type PHCTVERSION = PHCTVERSION_V2; //Flags for RECEIVERINFO Const HCT_RECEIVERFLAG_DEFAULT = $1; Type RECEIVERINFO = Record dwSize: DWORD; // Set to structure size dwFlags: DWORD; hWnd: HWND; // Notification Window uMessage: UINT; // Using message number end; Type RECEIVERID = DWORD; Const HCT_RID_INVALID = $FFFFFFFF; //­́¬° ((RECEIVERID) -1); Function HCTLoadModule(var aErrMsg:String):Boolean; Function HCTCloseModule(var aErrMsg:String):Boolean; // Prototypes var // Initiailizations HCTInitEx: Function(Version: DWORD):HCTERR; Stdcall; HCTClose: Function():HCTERR; Stdcall; // Ports HCTPortOpen: Function(uPort, dwFlags, dwReserved: DWORD):HCTERR; Stdcall; HCTPortClose: Function():HCTERR; Stdcall; HCTIsConnected:Function():Boolean; Stdcall; // Registration HCTRegisterReceiver: Function(pReceiver: RECEIVERINFO; pRID: RECEIVERID):HCTERR; Stdcall; HCTUnregisterReceiver:Function(rid: RECEIVERID):HCTERR; Stdcall; // Focus HCTGetFocus: Function():RECEIVERID; Stdcall; HCTSetFocus: Function(rid: RECEIVERID):HCTERR; Stdcall; HCTRemoveFocus:Function(rid: RECEIVERID):HCTERR; Stdcall; // Events HCTGetEvent: Function(rid: RECEIVERID; pEvt: THCTEVENT):HCTERR; Stdcall; HCTGetEvents:Function(rid: RECEIVERID; pEvt: THCTEVENT; nCount: UINT):HCTERR; Stdcall; // Miscellenous HCTGetVersion: Function(pHctVer: PHCTVERSION):HCTERR; Stdcall; HCTGetParameter:Function(rid: RECEIVERID; uParam: UINT; pValue: DWORD):HCTERR; Stdcall; HCTSetParameter:Function(rid: RECEIVERID; uParam: UINT; value: DWORD):HCTERR; Stdcall; HCTSmoothStroke:Function(pInStroke: TPOINT; nInCount: UINT; pOutStroke: TPOINT; pnOutCount: UINT; dwFlags: DWord):HCTERR; Stdcall; HCTHnd: THandle; implementation function HCT_MAKEVERSION(Major, Minor, Build: integer): Cardinal; begin Result := (Major shl 24) + (Minor shl 16) + (Build shl 8); end; function HCT_ISPENEVENT(x: Integer): Boolean; begin if (x >= HCT_EVT_PENEVENTS_BEGIN) and (x <= HCT_EVT_PENEVENTS_END) then Result:=True else Result:=False; end; Function HCTLoadModule(var aErrMsg:String):Boolean; begin Result := False; aErrMsg := ''; HCTHnd := LoadLibrary('PNTRoute.dll'); If HCTHnd=0 then begin aErrMsg := aErrMsg + 'not found PNTRoute.dll' + #13#10; Exit; end; @HCTInitEx := GetProcAddress(HCTHnd, 'HCTInitEx'); @HCTClose := GetProcAddress(HCTHnd, 'HCTClose'); @HCTPortOpen := GetProcAddress(HCTHnd, 'HCTPortOpen'); @HCTPortClose := GetProcAddress(HCTHnd, 'HCTPortClose'); @HCTIsConnected := GetProcAddress(HCTHnd, 'HCTIsConnected'); @HCTRegisterReceiver := GetProcAddress(HCTHnd, 'HCTRegisterReceiver'); @HCTUnregisterReceiver:= GetProcAddress(HCTHnd, 'HCTUnregisterReceiver'); @HCTGetFocus := GetProcAddress(HCTHnd, 'HCTGetFocus'); @HCTSetFocus := GetProcAddress(HCTHnd, 'HCTSetFocus'); @HCTRemoveFocus := GetProcAddress(HCTHnd, 'HCTRemoveFocus'); @HCTGetEvent := GetProcAddress(HCTHnd, 'HCTGetEvent'); @HCTGetEvents := GetProcAddress(HCTHnd, 'HCTGetEvents'); @HCTGetVersion := GetProcAddress(HCTHnd, 'HCTGetVersion'); @HCTGetParameter := GetProcAddress(HCTHnd, 'HCTGetParameter'); @HCTSetParameter := GetProcAddress(HCTHnd, 'HCTSetParameter'); @HCTSmoothStroke := GetProcAddress(HCTHnd, 'HCTSmoothStroke'); If @HCTInitEx=nil then aErrMsg := aErrMsg + 'not found HCTInitEx Function' + #13#10; If @HCTClose=nil then aErrMsg := aErrMsg + 'not found HCTClose Function' + #13#10; If @HCTPortOpen=nil then aErrMsg := aErrMsg + 'not found HCTPortOpen Function' + #13#10; If @HCTPortClose=nil then aErrMsg := aErrMsg + 'not found HCTPortClose Function' + #13#10; If @HCTIsConnected=nil then aErrMsg := aErrMsg + 'not found HCTIsConnected Function' + #13#10; If @HCTRegisterReceiver=nil then aErrMsg := aErrMsg + 'not found HCTRegisterReceiver Function' + #13#10; If @HCTUnregisterReceiver=nil then aErrMsg := aErrMsg + 'not found HCTUnregisterReceiver Function' + #13#10; If @HCTGetFocus=nil then aErrMsg := aErrMsg + 'not found HCTGetFocus Function' + #13#10; If @HCTSetFocus=nil then aErrMsg := aErrMsg + 'not found HCTSetFocus Function' + #13#10; If @HCTRemoveFocus=nil then aErrMsg := aErrMsg + 'not found HCTRemoveFocus Function' + #13#10; If @HCTGetEvent=nil then aErrMsg := aErrMsg + 'not found HCTGetEvent Function' + #13#10; If @HCTGetEvents=nil then aErrMsg := aErrMsg + 'not found HCTGetEvents Function' + #13#10; If @HCTGetVersion=nil then aErrMsg := aErrMsg + 'not found HCTGetVersion Function' + #13#10; If @HCTGetParameter=nil then aErrMsg := aErrMsg + 'not found HCTGetParameter Function' + #13#10; If @HCTSetParameter=nil then aErrMsg := aErrMsg + 'not found HCTSetParameter Function' + #13#10; If @HCTSmoothStroke=nil then aErrMsg := aErrMsg + 'not found HCTSmoothStroke Function' + #13#10; Result := True; end; Function HCTCloseModule(var aErrMsg:String):Boolean; begin Result := False; If HCTHnd=0 then begin Result := True; Exit; end; Try HCTClose; FreeLibrary(HCTHnd); aErrMsg := ''; Except aErrMsg := 'Can not close the PNTRoute.dll'; end; end; end.