⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scantech.pas

📁 Wrapper Class for ScanTech SG-15
💻 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 + -