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

📄 smsredskyimpl.pas

📁 本控件适用于WAVECOM模块
💻 PAS
📖 第 1 页 / 共 3 页
字号:

procedure TRedSky.Set_HelpFile(const Value: WideString);
begin
  HelpFile := String(Value);
end;

procedure TRedSky.Set_HelpKeyword(const Value: WideString);
begin
  HelpKeyword := String(Value);
end;

procedure TRedSky.Set_HelpType(Value: TxHelpType);
begin
  HelpType := THelpType(Value);
end;

procedure TRedSky.Set_KeyPreview(Value: WordBool);
begin
  KeyPreview := Value;
end;

procedure TRedSky.Set_PixelsPerInch(Value: Integer);
begin
  PixelsPerInch := Value;
end;

procedure TRedSky.Set_PrintScale(Value: TxPrintScale);
begin
  PrintScale := TPrintScale(Value);
end;

procedure TRedSky.Set_Scaled(Value: WordBool);
begin
  Scaled := Value;
end;

procedure TRedSky.Set_Visible(Value: WordBool);
begin
  Visible := Value;
end;
//=======(自定义函数)===2004-08-11====by 郭秀双=================================
//功能:初始化Pdu 发送设置
//参数:Sign :: 1 :Text方式;0:Pdu方式
Function TReadTranslateThread.InitStartSendMode(Sign:string):string;
var
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始发送====初始化PDU设置信息===================
  str:='AT+CMGF='+Sign+chr(13);
  buf:=@str;
  inc(buf);
  len:=length(str);
  comm1.WriteCommData(buf,len);
  sleep(200);
end;
//=========(自定义函数)=====2004-08-11=====by 郭秀双===========================
//功能:从GSM监控中心模块中读取指定的信息
//参数:
Function TReadTranslateThread.DeleteInfo(index:string):string;
var
 // SendLength:integer;
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始删除====信息===================
       str:='AT+CMGD='+index+#13;
       buf:=@str;
       inc(buf);
       application.ProcessMessages;
       len:=length(str);
       comm1.WriteCommData(buf,len);
end;
//=========(自定义函数)=====2004-08-11=====by 郭秀双===========================
//功能:从GSM监控中心模块中读取指定的信息
//参数:
Function TReadTranslateThread.ReadInfo(index:string):string;
var
 // SendLength:integer;
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始读取====信息===================
  str:='AT+CMGR='+index+#13;
 // M_Send.Lines.Add('读取信息:'+index);
  buf:=@str;
  inc(buf);
  application.ProcessMessages;
  len:=length(str);
  M.Lines.Add('SendReadCom:'+str) ;
  comm1.WriteCommData(buf,len);
end;
//读取解析短信线程
Constructor TReadTranslateThread.Create(Suspended:Boolean;Index:string;Memo:Tmemo;Commname:Tcomm);
begin
   inherited Create(Suspended);
     ID_Index:=Index;
     M:=Memo;
     Comm1:=Commname;
   FreeOnTerminate:=True;
end;
procedure TReadTranslateThread.execute;
var
   WaitReturn: DWORD;
begin
  FreeOnTerminate := True;
  //进入同步,防止其他线程访问
  WaitReturn := WaitForSingleObject(ReadMutex, INFINITE);
  begin
     WaitForSingleObject(SendMutex, INFINITE);
     //执行解析短信信息==========
     TranslateSMS;
     //====暂停1秒钟==防止数据表锁死=============
     sleep(200);
     ReleaseMutex(ReadMutex);//
     sleep(200);
  end;
end;
//=======(自定义函数)===2004-08-11====by 郭秀双=================================
//功能:初始化Pdu 发送设置
//参数:Sign :: 1 :Text方式;0:Pdu方式
Function TRedSky.InitStartSendMode(Sign:widestring):widestring;
var
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始发送====初始化PDU设置信息===================
  str:='AT+CMGF='+Sign+chr(13);
  buf:=@str;
  inc(buf);
  len:=length(str);
  comm1.WriteCommData(buf,len);
  sleep(200);
end;
//=========(自定义函数)=====2004-08-11=====by 郭秀双===========================
//功能:从GSM监控中心模块中读取指定的信息
//参数:
Function TRedSky.DeleteInfo(index:widestring):widestring;
var
 // SendLength:integer;
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始删除====信息===================
       str:='AT+CMGD='+index+#13;
       buf:=@str;
       inc(buf);
       application.ProcessMessages;
       len:=length(str);
       comm1.WriteCommData(buf,len);
end;
//=========(自定义函数)=====2004-08-11=====by 郭秀双===========================
//功能:从GSM监控中心模块中读取指定的信息
//参数:
Function TRedSky.ReadInfo(index:widestring):widestring;
var
 // SendLength:integer;
  str:shortstring;
  len:word;
  buf:pchar;
begin
   //=====开始读取====信息===================
  str:='AT+CMGR='+index+#13;
 // M_Send.Lines.Add('读取信息:'+index);
  buf:=@str;
  inc(buf);
  application.ProcessMessages;
  len:=length(str);
  comm1.WriteCommData(buf,len);
end;
procedure TReadTranslateThread.TranslateSMS;
var
 str:widestring;
begin
  str:='1';
  //=========初始化Text模式读取信息==
  InitStartSendMode(str);
  sleep(200);
  //=========执行读取================
  ReadInfo(Trim(ID_Index));
  //=========读取完毕后删除短信息====
  sleep(500);
  DeleteInfo(ID_Index);
  sleep(500);
end;

//=========(自定义函数)=====2004-08-11=====by 郭秀双===========================
//功能:初始化GSM模块的设置
//参数:SMSCenter:短心中信号码(+8613800100500); BaudRate:COM口的波特率(9600);Com:串口(Com1,Com2)
Function TRedSky.InitSMSCenter(SMSCenter,BaudRate,Com:Widestring):integer;
var
   str:shortstring;
  len:word;
  buf:pchar;
begin
 Try
  //======1\设置波特率=========================
  Comm1.BaudRate:=StrToInt(BaudRate);  //(PwideChar(Pointer(Retval))
  //======2\打开COM口==========================
  Comm1.CommName:=Com;
  Comm1.StartComm;
  //======3\设置短心中信号码===================
  { str:='AT+CSCA='+'"'+SMSCenter+'"'+#13;
   buf:=@str;
   inc(buf);
   len:=length(str);
   comm1.WriteCommData(buf,len); }
   SendMutex := CreateMutex(nil, False, nil); ////在窗体创建时,模糊查询线程创建互斥量
   ReadMutex := CreateMutex(nil, False, nil); ////在窗体创建时,模糊查询线程创建互斥量
   Result:=0;
 except
   Result:=-1;
 end;
end;
//控件方法=====初始化====2004-08-14 by 郭秀双=====================
function TRedSky.Init(const Com, BaudRate, SMSCenter: WideString): Integer;
begin
  Result:=InitSMSCenter(SMSCenter,BaudRate,Com);
end;
//=========================================================
//截取信息来自的 手机号码
//+8613693652161
// 683196632561F1
Function TRedSky.FromTel(STR:widestring):widestring;
var
 Num:widestring;
 len,i:integer;
 Tel_Num:widestring;
 //Temp1,Temp2:string;
begin
  Num:=copy(STR,25,38) ;
  i:=1;
   len:=length(STR);
      while i<=14 do
        begin
                Tel_Num := Tel_Num + Num[i + 1] + Num[i];
                inc(i, 2);
        end;
  FromTel:=Tel_Num;
 // showmessage(Tel_Num);
end;
function TRedSky.CopyText(var TelNum:widestring;Str:widestring):widestring;
var
 i,j:integer;
 s_Text:widestring;
 Next_Str,Num:widestring;
begin
  i:=pos('0891',Str);
  Next_Str:=copy(Str,i,length(Str));
  Num:=FromTel(Next_Str);
  //TelNum:=FromTel(Next_Str);
  TelNum:='+'+Copy(Num,1,Length(Num)-1);
  j:=pos(#13,Next_Str);
  Next_Str:=copy(Str,i,j);
  s_Text:=trim(copy(trim(Next_Str),56,j-1)) ;
  CopyText:=s_Text;
  
end;
//删除回车、换行符======================
function  DeleteReturn(sStr: string): string;
var
  i:integer;
  sTemp : string;
begin
  sTemp :='';
  for i:=1 to Length(sStr) do
    if (Ord(sStr[i]) <> longint (#13)) and (Ord(sStr[i]) <>longint(#10)) then
       sTemp :=sTemp+sStr[i];
  Result :=sTemp ;
end;
//============GBK转为汉字=======================================================
function WideStrToCh(S: String): Widestring; //
var
  C,C1,C2: String;
  SS: WideString;
  i: Word;
begin
  i := 1;
  while i <= (Length(S) - 2) do
  begin
    C1 := Copy(S, i, 2);
    C2 := Copy(S, i + 2, 2);
    C := Chr(StrToInt('$' + C1)) + Chr(StrToInt('$' + C2));
    SS := SS + C;
    i := i + 4;
  end;
  Result := SS;
end;
//短信息解码============================
function TRedSky.UniCode2GB(S : wideString):wideString;

Var
 I,j: Integer;
 StrR,SS,S0:String;
 First,Second,Last,ReCode,Temp:shortString;
  Q_Num,Q,Total,len1:integer;
begin
   S0:=DeleteReturn(S);   
   j:=pos('000D000A',S0) ;
  //==============判断是否有回车换行=======================
  if j>0 then
    SS:=Copy(S0,1,j-1)
  else
    SS:=Copy(S0,1,Length(Trim(S0)));
  //=======================================================
{  if Pos(#13,S)>0 then
    SS     }
  I := Length(SS);
  while I >=4 do
    begin
     try
        StrR :=WideChar(StrToInt('$'+SS[I-3]+SS[I-2]+SS[I-1]+SS[I]))+ StrR;
     except

     end;
     I := I - 4;
    end;
  //=============//如果存在没有解码的信息继续进行============================
  j:=pos(',?',StrR);
  if j>0 then   
     begin
        ReCode:=copy(StrR,j+1,length(StrR)-j);
        First:=copy(StrR,1,j); //截取乱码之前的正常的“字符串”
        //计算乱码有几个, 例如:“???”
        Q_Num:=length(ReCode);
        if Q_Num>0 then
           begin
             Total:=length(S0);
             len1:=4*Q_Num ;
             Temp:=copy(S0,Total-(7+len1),len1);
             Second:=WideStrToCh(Temp);
             Last:= First+Second;
           end;
     END
   else
     begin
       Last:=StrR
     end;
  Result :=Last;
end;
//=========(自定义函数)====2004-08-12====by 郭秀双==============================
//提取电话号码+回执信息
//+CMGR: "REC READ","+8613811205013",,"04/08/11,15:57:21+32"
//$OK:TMSG
//OK
Function TRedSky.RecieveOKTMSG(var TelNum:widestring;Str:widestring):widestring;
var
 i,j:integer;
 //s_Text:string;
 Next_Str:widestring;
begin
  i:=pos('+86',Str);
  Next_Str:=copy(Str,i+3,11); //提取手机号码
  //==============================================
  TelNum:=Next_Str;           //传递给函数变量返回

  j:=pos('$OK:TMSG',Str);
  if j>0 then
  RecieveOKTMSG:='$OK:TMSG';
end;
//=========(自定义函数)====2004-08-12====by 郭秀双==============================
//功能:COM口收到车载发送回来的信息后,通知Com口,然后再从GSM读取信息,删除信息
//格式:+CMTI: "SM",9
Function TRedSky.ReadComSMS(Str:string):string;
var
 i,j:integer;
 //s_Text:string;
 Next_Str,Num:string;
begin
  i:=pos(',',Str);
  Num:=Copy(Str,i,length(Str)-i);
  j:=pos(#13,Num);
  if (i>0) and (J>0) then
    Next_Str:=copy(Num,2,j-2);
  //-----------------------------------
  ReadComSMS:=Next_Str;
  M.Lines.Add('FromIndex:'+Next_Str);
  //进行线程读取=================
  TReadTranslateThread.Create(False,Next_Str,M,Comm1);

end;
//=========(自定义函数)====2004-08-12====by 郭秀双==============================
//提取电话号码+回执信息
//+CMGR: "REC READ","+8613811205013",,"04/08/11,15:57:53+32"
//00240054004D00530047003D0031003000310030003000300030003000300031002CC8B7C8CF000D000A
//OK
Function TRedSky.RecieveHandOK(var TelNum:widestring;Str:widestring):widestring;
var
 i,j:integer;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -