?? smsredskyimpl.pas
字號:
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 + -