📄 scantech.pas
字号:
unit ScanTech;
interface
uses
Windows, Classes, IdTelnet;
const
EscapeChar = char($1b);
type
TPanelAlignment = (paLeftTop = $30, paCenterTop = $31, paRightTop = $32,
paLeftCenter = $33, paCenterCenter = $34, paRightCenter = $35,
paLeftBottom = $36, paCenterBottom = $37, paRightBottom = $38,
paLeftY = $39, paCenterY = $3A, paRightY = $3B,
paXTop = $3C, paXCenter = $3D, paXBottom = $3E);
TFontSet = (fsSmall = $30, fsLarge = $31);
TDestinationDevice = (ddDisplay = $30, ddSerialPort1 = $31, ddSerialPort2 = $32);
//TNotifyRXEvent = procedure(Sender : TObject; data : string) of object;
TDataAvailEvent = procedure (Sender: TObject; const Buffer: String) of object;
TSG15 = Class
private
FIPAddress : String;
FPort: Integer;
FCursorPos : TPoint;
FPixelPos : TPoint;
FIdTelnet: TIdTelnet;
FDefAlignment : TPanelAlignment;
FBacklight: Boolean;
FCanScan: Boolean;
FBarcode: Boolean;
FCursorX : Integer;
FCursorY : Integer;
FPixelX : Integer;
FPixelY : Integer;
FNotifyRXEvent :TDataAvailEvent;
procedure SetBarcode(const Value: Boolean);
procedure SetIPAddress(const Value: String);
procedure SetPort(const Value: Integer);
function GetConnectionState: Boolean;
procedure SetBacklight(const Value: Boolean);
function GetAlignment: TPanelAlignment;
procedure SetAlignment(const Value: TPanelAlignment);
procedure SendCommand(Str:String);
procedure DataAvailableHandler(Sender: TIdTelnet; const Buffer: String);
public
property IPAddress : String read FIPAddress write SetIPAddress;
property Port: Integer read FPort write SetPort;
property Connected : Boolean read GetConnectionState;
property Backlight : Boolean read FBacklight write SetBacklight;
property CanScan : Boolean read FCanScan write FCanScan;
property BarcodeScan : Boolean read FBarcode write SetBarcode;
property DefAlignment : TPanelAlignment read GetAlignment write SetAlignment;
//property OnReceive: TNotifyRXEvent read FNotifyRXEvent write FNotifyRXEvent;
property OnReceive: TDataAvailEvent read FNotifyRXEvent write FNotifyRXEvent;
procedure ClearScreen;
procedure WriteText(Str:String;X,Y:Integer;Align:TPanelAlignment);overload;
procedure WriteText(Str:String); overload;
procedure DoBeep;
procedure Sleep;
procedure Wakeup;
procedure Reset;
procedure SetFont(Font : TFontSet);
procedure GetFirmwareVersion;
procedure RerouteEthernet(Dest : TDestinationDevice);
procedure GenerateBacklightPulse;
procedure SetCursorPos(Pos:Integer;Line:Integer);
procedure SetPixelPos(Pos:Integer;Line:Integer);
constructor Create(IP:String;Port:Integer);
destructor Destroy;
end;
implementation
{ TSG15 }
procedure TSG15.ClearScreen;
begin
SendCommand('%'); //CHR($25)
end;
constructor TSG15.Create(IP:String;Port:Integer);
begin
FIdTelnet:= TIdTelnet.Create;
//FIdTelnet.ThreadedEvent:=True;
FIdTelnet.Host:=IP;
FIdTelnet.Port:=Port;
FIdTelnet.Connect;
FIdTelnet.OnDataAvailable := DataAvailableHandler;
end;
procedure TSG15.DataAvailableHandler(Sender: TIdTelnet;
const Buffer: String);
begin
if Assigned(FNotifyRXEvent) then OnReceive(Self, Buffer);
end;
destructor TSG15.Destroy;
begin
FIdTelnet.Free;
end;
procedure TSG15.DoBeep;
begin
SendCommand('^'); //CHR($5E)
end;
function TSG15.GetConnectionState: Boolean;
begin
Result:=FIdTelnet.Connected;
end;
procedure TSG15.GetFirmwareVersion;
begin
SendCommand('`');{CHR($60)}
end;
procedure TSG15.SetBacklight(const Value: Boolean);
begin
FBacklight:=Value;
if Value then
SendCommand('\'+CHR($31))
else
SendCommand('\'+CHR($30)); //CHR($5C)
end;
procedure TSG15.SetBarcode(const Value: Boolean);
begin
FBarcode := Value;
end;
procedure TSG15.SetCursorPos(Pos, Line: Integer);
begin
if Pos<0 then Pos:=0;
if Pos>4 then Pos:=4;
if Line<0 then Line:=0;
if Line>15 then Line:=15;
SendCommand(''''+CHR(Byte($30+Pos)) + CHR(Byte($30+Line)) ); {CHR($27)}
end;
procedure TSG15.SetFont(Font: TFontSet);
begin
SendCommand('B'+CHR(Byte(Font)));{CHR($42)}
end;
procedure TSG15.SetIPAddress(const Value: String);
begin
FIPAddress := Value;
end;
procedure TSG15.SetPixelPos(Pos, Line: Integer);
begin
if Pos<0 then Pos:=0;
if Pos>127 then Pos:=127;
if Line<0 then Line:=0;
if Line>63 then Line:=63;
SendCommand(','+CHR(Byte($30+Pos)) + CHR(Byte($30+Line)) ); {CHR($2C)}
end;
procedure TSG15.SetPort(const Value: Integer);
begin
FPort := Value;
end;
procedure TSG15.GenerateBacklightPulse;
begin
SendCommand('|');{CHR($7C)}
end;
function TSG15.GetAlignment: TPanelAlignment;
begin
Result := FDefAlignment;
end;
procedure TSG15.SetAlignment(const Value: TPanelAlignment);
begin
SendCommand('.'+CHR(Byte(Value)));{CHR($2E)}
end;
procedure TSG15.RerouteEthernet(Dest : TDestinationDevice);
begin
SendCommand('p'+Chr(Byte(Dest)));{CHR($70)}
end;
procedure TSG15.Reset;
begin
SendCommand('Z'); //CHR($5A)
FIdTelnet.Disconnect;
FIdTelnet.Free;
FIdTelnet := nil;
FIdTelnet := TIdTelnet.Create;
FIdTelnet.Host:=IPAddress;
FIdTelnet.Port:=Port;
FIdTelnet.Connect;
FIdTelnet.OnDataAvailable := DataAvailableHandler;
end;
procedure TSG15.Sleep;
begin
SendCommand('@'); //CHR($40)
end;
procedure TSG15.Wakeup;
begin
SendCommand('A'); //CHR($41)
end;
procedure TSG15.SendCommand(Str: String);
begin
FIdTelnet.Socket.WriteLn(EscapeChar+Str);
end;
procedure TSG15.WriteText(Str: String; X, Y: Integer;
Align: TPanelAlignment);
begin
SendCommand('.'+CHR(Byte(GetAlignment)));{CHR($2E)}
FIdTelnet.Socket.WriteLn(Str+Char($03));
end;
procedure TSG15.WriteText(Str: String);
begin
FIdTelnet.Socket.WriteLn(Str);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -