📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, OleCtrls, MSCommLib_TLB, ComCtrls, IdBaseComponent,
IdComponent, IdUDPBase, IdUDPServer,IdSocketHandle, CoolTrayIcon, Menus,
Buttons;
type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
ComboBox1: TComboBox;
Label1: TLabel;
CoolTrayIcon1: TCoolTrayIcon;
PopupMenu1: TPopupMenu;
N1: TMenuItem;
N2: TMenuItem;
Memo1: TMemo;
btnCtlLeft: TSpeedButton;
btnCtlUp: TSpeedButton;
btnCtlDown: TSpeedButton;
btnCtlRight: TSpeedButton;
btnCtlNear: TButton;
btnCtlFar: TButton;
Label2: TLabel;
Memo2: TMemo;
MSComm1: TMSComm;
IdUDPServer1: TIdUDPServer;
procedure N1Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure btnCtlUpClick(Sender: TObject);
procedure btnCtlDownClick(Sender: TObject);
procedure btnCtlLeftClick(Sender: TObject);
procedure btnCtlRightClick(Sender: TObject);
procedure btnCtlNearClick(Sender: TObject);
procedure btnCtlFarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure CoolTrayIcon1DblClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure MSComm1Comm(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle); //设置发送的内容
private
{ Private declarations }
bzw:boolean;
procedure Log(pi_sStr:String);
procedure OutputToCom(pi_oleData:oleVariant);
//procedure SwitchInput(pi_char:char);
procedure UpMove();
procedure DownMove();
procedure LeftMove();
procedure RightMove();
procedure FocusAdd();
procedure FocusReduce();
procedure StopMove(pi_nNo:integer);
procedure ContinueMove();
function getSztdz():integer;
procedure Proccess(pi_sStr:String);
procedure UpMoveByNo(pi_nNo:integer);
procedure DownMoveByNo(pi_nNo:integer);
procedure LeftMoveByNo(pi_nNo:integer);
procedure RightMoveByNo(pi_nNo:integer);
procedure FocusAddMoveByNo(pi_nNo:integer);
procedure FocusReduceMoveByNo(pi_nNo:integer);
// procedure StopMoveByNo(pi_nNo:integer);
protected
procedure ActionChange(Sender: TObject; CheckDefaults: Boolean);
override;
public
{ Public declarations }
procedure ApplicationEventsException(Sender: TObject; E: Exception);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.N1Click(Sender: TObject);
begin
CoolTrayIcon1.ShowMainForm;
end;
procedure TForm1.N2Click(Sender: TObject);
begin
Application.Terminate;
end;
procedure TForm1.FormShow(Sender: TObject);
begin
ComboBox1.ItemIndex :=0;
end;
procedure TForm1.Log(pi_sStr: String);
begin
if memo2.Lines.Count>1024 then
begin
memo2.Lines.Clear;
end;
memo2.Lines.Insert(0,DateTimeToStr(now)+':'+pi_sStr);
end;
procedure TForm1.OutputToCom(pi_oleData:oleVariant);
begin
if not MSComm1.PortOpen then
begin
MSComm1.PortOpen := true;
Log('打开端口成功!');
end;
if MSComm1.PortOpen then
begin
msComm1.Output := pi_oleData ;
Log('执行命令成功!');
end
else
begin
Log('执行命令失败');
end;
end;
procedure TForm1.btnCtlUpClick(Sender: TObject);
begin
UpMove();
//向上移动
end;
procedure TForm1.btnCtlDownClick(Sender: TObject);
begin
DownMove(); //向下移动
end;
procedure TForm1.btnCtlLeftClick(Sender: TObject);
begin
LeftMove(); //向左移动
end;
procedure TForm1.btnCtlRightClick(Sender: TObject);
begin
RightMove(); //向右移动
end;
procedure TForm1.btnCtlNearClick(Sender: TObject);
begin
FocusAdd(); //聚集加
end;
procedure TForm1.btnCtlFarClick(Sender: TObject);
begin
FocusReduce(); //聚焦减
end;
procedure TForm1.UpMove;
begin
UpMoveByNo(getSztdz());
end;
procedure TForm1.DownMove;
begin
DownMoveByNo(getSztdz());
end;
procedure TForm1.LeftMove;
begin
LeftMoveByNo(getSztdz());
end;
procedure TForm1.RightMove;
begin
RightMoveByNo(getSztdz());
end;
procedure TForm1.FocusAdd;
begin
FocusAddMoveByNo(getSztdz());
end;
procedure TForm1.FocusReduce;
begin
FocusReduceMoveByNO(getSztdz());
end;
{procedure TForm1.StopMove;
begin
StopMoveByNo(getSztdz());
end; }
procedure TForm1.FormCreate(Sender: TObject); //MSCOMM初始化
begin
mscomm1.CommPort :=1; //指定端口
mscomm1.Settings := '38400,N,8,1'; //其它参数
mscomm1.InBufferSize := 1024; //接收缓冲区
mscomm1.OutBufferSize := 1024; //发送缓冲区
mscomm1.InputMode :=comInputModeBinary; //接收模式
mscomm1.InputLen := 1; //一次读取所有数据
mscomm1.SThreshold := 0; //一次发送所有数据
mscomm1.InBufferCount := 0; //清空读取缓冲区
mscomm1.OutBufferCount := 0; //清空发送缓冲区
MSComm1.RThreshold := 1; //设置接收多少字节开产生oncomm事件
mscomm1.PortOpen:=True; //打开端口
end;
procedure TForm1.ApplicationEventsException(Sender: TObject; E: Exception);
begin
Log(E.Message);
if MSComm1.PortOpen then
begin
MSComm1.PortOpen := false;
end;
end;
procedure TForm1.CoolTrayIcon1DblClick(Sender: TObject);
begin
CoolTrayIcon1.ShowMainForm;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if mscomm1.PortOpen then //关闭MSCOMM
begin
mscomm1.PortOpen := False;
end;
end;
procedure TForm1.MSComm1Comm(Sender: TObject);
begin
case mscomm1.CommEvent of
comEvReceive: bzw := true;
end;
end;
function TForm1.getSztdz():integer;
begin
case combobox1.ItemIndex of
0 :
result :=$01;
1 :
result :=$02;
2 :
result :=$03;
3 :
result :=$04;
4 :
result :=$05;
5 :
result :=$06;
6 :
result :=$07;
7 :
result :=$08;
8 :
result :=$09;
end;
end;
procedure TForm1.ContinueMove;
var
senddata:array of BYTE;
begin
SetLength(senddata,9);
senddata[0]:=($A0); //停止命令 要发送的数据
senddata[1]:=($00);
senddata[2]:=getSztdz();
senddata[3]:=($01);
senddata[4]:=($03);
senddata[5]:=($00);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
end;
procedure TForm1.ActionChange(Sender: TObject; CheckDefaults: Boolean);
begin
inherited;
end;
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
begin
memo1.Lines.LoadFromStream(AData);
Proccess(memo1.Lines.Text);
end;
procedure TForm1.Proccess(pi_sStr: String);
var
nPos1 :integer;
sTmp :string;
begin
Log('收到_'+pi_sStr);
//字串为6种格式 (Up,Down,Left,Right,Add,Reduce)
if Pos('Up',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
UpMoveByNo(strtoint(sTmp));
exit;
end;
if Pos('Down',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
DownMoveByNo(strtoint(sTmp));
exit;
end;
if Pos('Left',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
LeftMoveByNo(strtoint(sTmp));
exit;
end;
if Pos('Right',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
RightMoveByNo(strtoint(sTmp));
exit;
end;
if Pos('Add',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
FocusAddMoveByNo(strtoint(sTmp));
exit;
end;
if Pos('Reduce',pi_sStr)>0 then
begin
nPos1 := pos('_',pi_sStr);
sTmp := copy(pi_sStr,nPos1+1,length(pi_sStr));
FocusReduceMoveByNo(strtoint(sTmp));
exit;
end;
Log('非法命令!');
end;
procedure TForm1.UpMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('UpMove');
SetLength(senddata,9);
senddata[0]:=$A0; //向上移动要发送的数据
senddata[1]:=$00;
senddata[2]:=pi_nNo;
senddata[3]:=$01;
senddata[4]:=$00;
senddata[5]:=$04;
senddata[6]:=$10;
senddata[7]:=$10;
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.DownMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('DownMove');
SetLength(senddata,9);
senddata[0]:=$A0; //向下移动要发送的数据
senddata[1]:=$00;
senddata[2]:=pi_nNo;
senddata[3]:=$01;
senddata[4]:=$00;
senddata[5]:=$08;
senddata[6]:=$10;
senddata[7]:=$10;
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.LeftMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('LeftMove');
SetLength(senddata,9);
senddata[0]:=($A0); //向左移动要发送的数据
senddata[1]:=($00);
senddata[2]:=pi_nNo;
senddata[3]:=($01);
senddata[4]:=($00);
senddata[5]:=($01);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.RightMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('RightMove');
SetLength(senddata,9);
senddata[0]:=($A0); //向右移动要发送的数据
senddata[1]:=($00);
senddata[2]:=pi_nNo;
senddata[3]:=($01);
senddata[4]:=($00);
senddata[5]:=($02);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.FocusAddMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('FocusAdd');
SetLength(senddata,9);
senddata[0]:=($A0); //聚焦加 要发送的数据
senddata[1]:=($00);
senddata[2]:=pi_nNo;
senddata[3]:=($01);
senddata[4]:=($01);
senddata[5]:=($00);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
//sleep(500);
ContinueMove();
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.FocusReduceMoveByNo(pi_nNo: integer);
var
senddata:array of BYTE;
begin
Log('FocusReduce');
SetLength(senddata,9);
senddata[0]:=($A0); //聚焦减 要发送的数据
senddata[1]:=($00);
senddata[2]:=pi_nNo;
senddata[3]:=($01);
senddata[4]:=($02);
senddata[5]:=($00);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
sleep(500);
ContinueMove();
Sleep(500);
StopMove(pi_nNo);
end;
procedure TForm1.StopMove(pi_nNo:integer);
var
senddata:array of BYTE;
begin
SetLength(senddata,9);
senddata[0]:=($A0); //停止命令 要发送的数据
senddata[1]:=($00);
senddata[2]:=pi_nNo;
senddata[3]:=($01);
senddata[4]:=($00);
senddata[5]:=($00);
senddata[6]:=($10);
senddata[7]:=($10);
senddata[8]:=($FFFF-(senddata[1]+senddata[2]+senddata[3]+senddata[4]+senddata[5]+senddata[6]+senddata[7])) mod 255;
OutputToCom(senddata);
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -