/////////////////////////////////////////////////////////////////////////////
//
// file inexio_multi.h
//
//
// Version 1.10
//
// Copyright (C) 2005- NEXIO Co., Ltd. All rights reserved
//
// Homepage : http://www.inexio.co.kr
//
/////////////////////////////////////////////////////////////////////////////
unit NexioPlug;
interface
uses Windows, Classes;
const
MPT_TOUCH_UP = 0;
MPT_TOUCH_DOWN = 1;
MPT_TOUCH_MOVE = 2;
MTOUCH_TOUCH_UP = (MPT_TOUCH_UP); //Touch Up OutputMulti dwstate
MTOUCH_TOUCH_DOWN = (MPT_TOUCH_DOWN); //Touch Down OutputMulti dwstate
MTOUCH_TOUCH_MOVE = (MPT_TOUCH_MOVE); //Touch Move OutputMulti dwstate
// MPointElement wStatus
INACTIVE_COORDINATE = $0000;
ACTIVE_COORDINATE = $0001;
IMAGE_COORDINATE = $0002;
REJECTED_COORDINATE = $0003;
MAX_MPOINTELEMENT = 100;
MAX_MPOINTELEMENT_V2 = 98;
EVENT_ARRIVED = 0; //Event arrived
TIME_WAS_OUT = 1; //Wait time was out
UNKNOWN_ERR = 2; //Unknown error object
NEXIO_ROTATE_0 = 0;
NEXIO_ROTATE_L90 = 90;
NEXIO_ROTATE_R90 = 270;
NEXIO_ROTATE_180 = 180;
NEXIO_ROTATE_360 = 360;
NEXIO_ROTATE_MIRROR_V = 1;
NEXIO_ROTATE_MIRROR_H = 2;
type
TMPointElement = record
// Screen Coordinate (x,y) state
// INACTIVE_COORDINATE, ACTIVE_COORDINATE, IMAGE_COORDINATE
wStatus: WORD;
wIndex: WORD; // ID of point
// Pressed touch point width at screen coordinate (x,y)
wXLength: WORD;
// Pressed touch point height at screen coordinate (x,y)
wYLength: WORD;
wXWidth: WORD; // Reserved
wYWidth: WORD; // Reserved
// Pressed touch x point at screen coordinate (x,y)
wX: WORD;
// Pressed touch y point at screen coordinate (x,y)
wY: WORD;
wXStart: WORD; // Reserved
wXEnd: WORD; // Reserved
wYStart: WORD; // Reserved
wYEnd: WORD; // Reserved
end;
POutputMulti = ^TOutputMulti;
TOutputMulti = record
// Multi-touch state
// MPT_TOUCH_UP, MPT_TOUCH_DOWN, MPT_TOUCH_MOVE
dwState : DWORD;
// MAX( mX, mY)
dwNumber : DWORD;
// Total X coordinate count
mX : DWORD;
// Total Y coordinate count
mY : DWORD;
case Integer of
0: (mPpointsOld : Array [0 .. MAX_MPOINTELEMENT - 1] of Array [0 .. MAX_MPOINTELEMENT - 1] of TMPointElement);
1: (
// mPpoints : Array[0 .. MAX_MPOINTELEMENT_V2 - 1] of Array [0 .. MAX_MPOINTELEMENT - 1] of TMPointElement;
mPpoints : Array[0 .. MAX_MPOINTELEMENT - 1] of Array [0 .. MAX_MPOINTELEMENT_V2 - 1] of TMPointElement;
sUsbID : Array[0 .. SizeOf(TMPointElement) * MAX_MPOINTELEMENT - 1] of char;
wUsbID : WORD;
wMonID : WORD;
dwRESERVED00 : Array[0 .. 4] of DWORD;
Reserved : Array[0 .. MAX_MPOINTELEMENT-2-1] of TMPointElement;
dwRESERVED01 : Array[0 .. 5] of DWORD;
);
end;
//////////////////////////////////////////////////////////////////////////
//
// Function: OpenNexioMulti
//
// Description:
// Open Event of NEXIO Multi-Point TouchScreen coordinate
//
// Returns:
// TRUE if Event Open successful, FALSE if Event fails....
//
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//BOOL __stdcall OpenNexioMulti();
function OpenNexioMulti: Boolean; stdcall; external 'MultiDll.dll' name 'OpenNexioMulti';
//////////////////////////////////////////////////////////////////////////
//
// Function: WaitNexioMulti
//
// Description:
// Wait Event and Touch Coordinate Output
//
// Input :
// nTime : [in] event wait time :: nTime is millisecond (INFINITE wait event infinite)
// Output :
// pBuffer : [out] pointer of touch coordinate
//
// Returns:
// EVENTARRIVED : Event arrived
// TIMEWASOUT : Wait time was out
// UNKNOWNERR : Unknown error object
//
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//int __stdcall WaitNexioMulti(DWORD nTime, OutputMulti *pBuffer);
function WaitNexioMulti(nTime: DWORD; pBuffer: POutputMulti): Integer; stdcall; external 'MultiDll.dll' name 'WaitNexioMulti';
//////////////////////////////////////////////////////////////////////////
//
// Function: CloseNexioMulti
//
// Description:
// Close Event of NEXIO Multi-Point TouchScreen coordinate
//
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//void __stdcall CloseNexioMulti();
procedure CloseNexioMulti; stdcall; external 'MultiDll.dll' name 'CloseNexioMulti';
//////////////////////////////////////////////////////////////////////////
//
// Function: NexioSetRotate
//
// Description:
// set rotation of touch-screen
// iRotateCode : NEXIO_ROTATE_XXX
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//void __stdcall NexioSetRotate( int iRotateCode );
procedure NexioSetRotate(iRotateCode: Integer); stdcall; external 'MultiDll.dll' name 'NexioSetRotate';
//////////////////////////////////////////////////////////////////////////
//
// Function: NexioGetRotate
//
// Description:
// get rotation code of touch-screen
// return : NEXIO_ROTATE_XXX
//////////////////////////////////////////////////////////////////////////
//extern "C" __declspec(dllexport)
//DWORD __stdcall NexioGetRotate();
function NexioGetRotate: DWORD; stdcall; external 'MultiDll.dll' name 'NexioGetRotate';
implementation
// x,y : point for rotation
// mx, my : width, height of screen
// fRatio : mx / my ( ratio in float )
// dwRotateAngle : angle in degree (NEXIO_ROTATE_XXX)
procedure nxRoratePoint(var x, y: Integer; mx, my: Integer; fRatio: Real; dwRotateAngle: DWORD);
var
x0, y0: Integer;
begin
x0 := x;
y0 := y;
case dwRotateAngle of
NEXIO_ROTATE_0:
Exit;
NEXIO_ROTATE_L90:
begin
x := Trunc( mx - y0 * fRatio );
y := Trunc( x0 / fRatio );
Exit;
end;
NEXIO_ROTATE_180:
begin
x := Trunc( mx - x0);
y := Trunc( my - y0);
Exit;
end;
NEXIO_ROTATE_R90:
begin
x := Trunc( y0 * fRatio );
y := Trunc( my - x0 / fRatio);
Exit;
end;
NEXIO_ROTATE_360:
begin
x := Trunc( y0 * fRatio);
y := Trunc( x0 / fRatio );
Exit;
end;
NEXIO_ROTATE_MIRROR_V: //mirror vertical
begin
y := my - y0;
Exit;
end;
NEXIO_ROTATE_MIRROR_H: //mirror horizontal
begin
x := mx - x0;
Exit;
end;
end;
end;
end.